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中使用它将返回false
。 isset
在两个实例中都将返回false
。
这取决于你的程序是如何完成的,但是如果你阅读手册中的注释,它将有助于解释函数的特性。
http://php.timesoft.cc/manual/en/function.property-exists.php
重要的部分在这里:
该文档省略了在运行时添加到对象的新属性的重要情况。 实际上,如果你询问这些属性,property_exists将返回true。