我正在为延迟加载 SQL 查询构建某种代理模式类。
代理模式使用__call
,__get
和__set
来中继对其对象的调用,但有时如果 SQL 没有返回任何行,则没有对象。
那么我的问题是,如果我is_null()
在代理类上做一个,是否有可能让类返回true
呢?我在想是否有任何我可以实现的 SPL 接口,比如 Countable,它可以让类在count()
.
有什么建议么?
可悲的是,我担心传递给 is_null 的对象返回 true 是不可能的。一些替代方案可能是:
使用 NullObjects,最近可以在 sitepoint http://www.sitepoint.com/forums/showthread.php?t=630292上找到关于这些的有趣讨论
实际上返回 null 而不是对象,尽管在您的情况下这可能是不可能的。
我不知道这是否有任何帮助,但通过利用 __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' 评估为假,'1' 在 if 语句中评估为真,因此它也可能对您的情况有所帮助。