Jared Farrish wrote:
> Hi all,
>
> I am building an assertType object using static functions. What I want to
> keep away from is the following:
>
> <code>
> public static function assertString($para){
> return $answer;
> };
> public static function assertBool($para){
> return $answer;
> };
> ...
> public static function assertArray($para){
> return $answer;
> };
> </code>
>
> What I would like to do is replace this with the following:
>
> <code>
> if (!class_exists('TypeAssert')) {
> class TypeAssert {
> private static $types = array(
> 'array','bool','float','integer','null','numeric',
> 'object','resource','scalar','string'
> );
> public static function __call($method,$arguments) {
> $obj = self::assertStandardTypes($arguments[0]);
> return $obj->$method;
> }
> public static function assertStandardTypes($para) {
> $r = TypeAssert::getTypesObject();
> if (is_array($para)) $r->array = true;
> if (is_bool($para)) $r->bool = true;
> if (is_float($para)) $r->float = true;
> if (is_integer($para)) $r->integer = true;
> if (is_null($para)) $r->null = true;
> if (is_numeric($para)) $r->numeric = true;
> if (is_object($para)) $r->object = true;
> if (is_resource($para)) $r->resource = true;
> if (is_scalar($para)) $r->scalar = true;
> if (is_string($para)) $r->string = true;
> return $r;
> }
> public static function getTypesObject() {
> $obj = (object) '';
> for ($i = 0; $i < count(self::$types); $i++) {
> $obj->{self::$types[$i]} = (bool) false;
> }
> return $obj;
> }
> }
> }
> echo('<pre>');
> echo(TypeAssert::string('test'));
> echo('</pre>');
> </code>
>
> I don't think this is possible (see
> http://marc.info/?l=php-general&m=114558851102060&w=2). But I would LIKE
> for
> it to work (currently, the above code doesn't).
>
> Anybody have any insight on how I might get this to work?
Hi Jared,
I think you meant to post to php-general, but I can answer your question.
***PLEASE DO NOT REPLY TO PEAR-GENERAL THANK YOU***
You can achieve what you want through this kind of code
<?php
class TypeChecker
{
private static $types = array(
'array','bool','float','integer','null','numeric',
'object','resource','scalar','string'
);
public static $singleton;
static function init()
{
self::$singleton = new TypeChecker;
}
function __call($method, $args)
{
$test = new StdClass;
foreach (self::$types as $thing) {
$test->$thing = ${"is$thing"}($args[0]);
}
return $test->$method;
}
}
TypeChecker::init()
echo TypeChecker::$singleton->string('test');
?>
However, I don't see any benefit to using static methods here. Just use
an object.
<?php
class TypeChecker
{
private $types = array(
'array','bool','float','integer','null','numeric',
'object','resource','scalar','string'
);
function __call($method, $args)
{
$test = new StdClass;
foreach (self::$types as $thing) {
$test->$thing = ${"is$thing"}($args[0]);
}
return $test->$method;
}
}
$check = new TypeChecker;
echo $check->string('test');
?>
If you're trying to do several assertions and separate them into
classes, do something like so:
<?php
class Tester
{
public $type;
...
function __construct()
{
$this->type = new TypeChecker;
}
}
$check = new Tester;
echo $check->type->string('test');
?>
Greg
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php