我正在为延迟加载SQL查询构建某种代理模式类。
代理模式使用__call
,__get
和__set
来中继对象的调用,但有时没有对象,如果SQL没有返回任何行。
我的问题是,如果我在代理类上执行is_null()
,是否可以让类返回true
呢?我在想是否有任何我可以实现的SPL接口,如Countable,它使该类在count()
中工作。
有什么建议吗?
答案 0 :(得分:2)
可悲的是,这是不可能的,我担心传递给is_null的对象返回true。一些替代方案可能是:
使用NullObjects,最近在sitepoint上可以找到关于这些的有趣讨论 http://www.sitepoint.com/forums/showthread.php?t=630292
实际上返回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,因此在您的情况下也可能有所帮助。