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

代理模式使用 __call, __get__set 用于中继对其对象的调用,但有时如果 SQL 未返回任何行,则没有对象。

我的问题是,如果我做一个 is_null() 在代理类上,是否可以使该类返回 true 然后?我在想是否有任何我可以实现的 SPL 接口,例如 Countable ,这使得该类可以在 count().

有什么建议么?

有帮助吗?

解决方案

遗憾的是,恐怕传递给 is_null 的对象不可能返回 true。一些替代方案可能是:

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

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

其他提示

我不知道这是任何帮助,但通过采取__toString方法,你可以实现可能你在找什么,但被警告的优势,这是不是在所有干净的代码或最佳实践,解决方案罗布建议实际上更好是

您已被使用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”的计算结果为假,“1”的计算结果为true if语句,所以可能你的情况有所帮助了。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top