代码之家  ›  专栏  ›  技术社区  ›  Michal M

empty()在对象的非空属性上返回TRUE

  •  5
  • Michal M  · 技术社区  · 16 年前

    我有一个非常奇怪和意想不到的问题。

    empty() 他回来了 TRUE 因为我不知道的原因在一个非空的财产上。

    class MyObject
    {
        private $_property;
    
        public function __construct($property)
        {
            $this->_property = $property;
        }
    
        public function __get($name)
        {
            $priv_name = "_{$name}";
    
            if (isset($this->$priv_name))
            {
                return $this->$priv_name;
            }
            else
            {
                return NULL;
            }
        }
    }
    
    $obj = new MyObject('string value');
    
    echo $obj->property;        // Output 'string value'
    echo empty($obj->property); // Output 1 (means, that property is empty)
    

    这是否意味着 __get() 使用时不调用magic函数 空()

    顺便说一句,我运行的是PHP版本5.0.4

    3 回复  |  直到 13 年前
        1
  •  11
  •   deceze    16 年前

    empty 不是你的日常功能,它是一种不按正常规则运作的语言结构。因为事实上, $obj->property 不存在,因此结果是正确的。

    你需要 implement __isset() isset 去工作。

        2
  •  5
  •   zildjohn01    16 年前

    empty isset 对于属性,您需要声明一个名为 __isset .

    下面是一个可能的实现:

    public function __isset($name)
    {
        $priv_name = "_{$name}";
    
        return isset($this->$priv_name);
    }
    
        3
  •  -1
  •   ρяσѕρєя K    10 年前
    if (isset(($this->$priv_name)))
    

    () 周围 对象->财产 值将强制在调用之前对其进行求值 isset .