是否有可能让 is_null 中的类返回 true?
题
我正在为延迟加载 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方法,你可以实现可能你在找什么,但被警告的优势,这是不是在所有干净的代码或最佳实践,解决方案罗布建议实际上更好是
您已被使用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语句,所以可能你的情况有所帮助了。
不隶属于 StackOverflow