美文网首页
empty的一个"bug"

empty的一个"bug"

作者: d866c6045d74 | 来源:发表于2017-10-11 10:30 被阅读32次

    先看一段代码例子:

    class  x {
        public function __get($k) {
            return 1;
        }
    
        public function __isset($k) {
            return true;
        }
    }
    
    $x = new x();
    var_dump($x->b);
    var_dump(empty($x->b));
    

    这个返回 1 false

    把__isset的代码注释掉,例子为:

    class  x {
        public function __get($k) {
            return 1;
        }
    
        //public function __isset($k) {
        //    return true;
        //}
    }
    
    $x = new x();
    var_dump($x->b);
    var_dump(empty($x->b));
    

    返回变为 1 true

    原因为:

    empty() will call __isset() first, and only if it returns true will it call __get().
    
    Implement __isset() and make it return true for every magic property that you support.
    

    也就是empty在__isset存在并且返回true 的时候才会调用__get。

    相关文章

      网友评论

          本文标题:empty的一个"bug"

          本文链接:https://www.haomeiwen.com/subject/lzwiyxtx.html