Php 有可能在is_null中得到类返回true吗?

Php 有可能在is_null中得到类返回true吗?,php,proxy,isnull,Php,Proxy,Isnull,我正在为懒散地加载SQL查询构建某种代理模式类 代理模式使用\uuu call、\uu get和\uu set来中继对其对象的调用,但如果SQL没有返回任何行,则有时没有对象 我的问题是,如果我在代理类上执行is\u null(),那么是否可以使类返回true?我在想是否有任何SPL接口可以像Countable那样实现,从而使类在count()中工作 有什么建议吗?遗憾的是,这是不可能的,我担心传递给is_null的对象返回true。一些替代方案可能是: 使用NullObjects,最近可以在s

我正在为懒散地加载SQL查询构建某种代理模式类

代理模式使用
\uuu call
\uu get
\uu set
来中继对其对象的调用,但如果SQL没有返回任何行,则有时没有对象

我的问题是,如果我在代理类上执行
is\u null()
,那么是否可以使类返回
true
?我在想是否有任何SPL接口可以像Countable那样实现,从而使类在
count()
中工作


有什么建议吗?

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

  • 使用NullObjects,最近可以在sitepoint上找到关于这些对象的有趣讨论

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


  • 我不知道这是否有任何帮助,但通过利用_u-toString方法,您可能会实现您想要的,但请注意,这根本不是干净的代码或最佳实践,Rob建议的解决方案实际上更好

    您必须使用PHP5.2或更高版本,并利用PHP类模型中的类型转换和_u-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;
    }
    
    这里发生的是uuToString方法返回字符串0或字符串1(注意,不要返回整数,返回字符串!)


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

    我非常确定这是不可能的,但不得不问:)NullObjects很有趣,但我正在尝试使我的datamapper设置完全将DB与域逻辑分离,并通过使用NullObjects,使用我的域模型的代码,我们需要意识到这一点。我可能会选择#2,它仍然需要我的域模型来扩展一个基本实体类,这不是完美的,但还行。谢谢你的意见。我也想到了toString,但不会完全按照我的意思做,但非常感谢你的评论