是否有可能在is_null中返回一个类返回true?

时间:2009-10-14 10:01:38

标签: php proxy isnull

我正在为延迟加载SQL查询构建某种代理模式类。

代理模式使用__call__get__set来中继对象的调用,但有时没有对象,如果SQL没有返回任何行。

我的问题是,如果我在代理类上执行is_null(),是否可以让类返回true呢?我在想是否有任何我可以实现的SPL接口,如Countable,它使该类在count()中工作。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

可悲的是,这是不可能的,我担心传递给is_null的对象返回true。一些替代方案可能是:

  1. 使用NullObjects,最近在sitepoint上可以找到关于这些的有趣讨论 http://www.sitepoint.com/forums/showthread.php?t=630292

  2. 实际上返回null而不是对象,尽管在您的情况下这可能不可能。

答案 1 :(得分:0)

我不知道这是否有任何帮助,但是利用__toString方法可以实现您正在寻找的东西,但要注意,这根本不是干净的代码或最佳实践,解决方案Rob建议其实更好

你必须使用PHP5.2或更高版本并利用类型转换和PHP类模型的__toString魔术方法

class Dummy 
{
    private $value;

    public function __construct($val)
    {
        $this->value = $val;
    }

    public function __toString()
    {
        return $this->value;
    }
}

$dummy = new Dummy('1');
if((string)$dummy) {
    echo "__toString evaluated as true".PHP_EOL;
} else {
    echo "__toString evaluated as false".PHP_EOL;
}

$dummy2 = new Dummy('0');
if((string)$dummy2) {
    echo "__toString evaluated as true".PHP_EOL;
} else {
    echo "__toString evaluated as false".PHP_EOL;
}

这里发生的是__toString方法返回字符串0或字符串1(注意,不返回整数,返回字符串!)

'0'的计算结果为false,'1'在if语句中的计算结果为true,因此在您的情况下也可能有所帮助。