testing属性是否存在

我读了PHP文档 isset()property_exists()快,我们应该使用两者的组合

 if (isset($this->fld) || property_exists($this, 'fld')) { 

但为什么我不能只用isset呢?

 if (isset($this->fld)) { 

因为property_exists会告诉你,即使它是一个定义的类/对象的属性,其中asset没有做出区分。 例如:

 class A { protected $hello; } class B { } 

类A中使用property_exists($this, 'hello')将返回true ,而在类B中使用它将返回falseisset两个实例中将返回false

这取决于你的程序是如何完成的,但是如果你阅读手册中的注释,它将有助于解释函数的特性。

http://php.timesoft.cc/manual/en/function.property-exists.php

重要的部分在这里:

该文档省略了在运行时添加到对象的新属性的重要情况。 实际上,如果你询问这些属性,property_exists将返回true。