测试属性是不是存在
Posted
技术标签:
【中文标题】测试属性是不是存在【英文标题】:Testing if property exists测试属性是否存在 【发布时间】:2010-08-08 01:53:09 【问题描述】:我在php docs 上读到isset()
比property_exists()
快,我们应该将两者结合使用
if (isset($this->fld) || property_exists($this, 'fld'))
但是为什么我不能只使用 isset 呢?
if (isset($this->fld))
【问题讨论】:
【参考方案1】:因为property_exists
会告诉您它是否甚至是类/对象的已定义属性,而 asisset 没有做出这种区分。例如:
class A
protected $hello;
class B
在class A中使用property_exists($this, 'hello')
会返回true
,而在class B中使用它会返回false
。 isset
将在 两个 实例中返回 false
。
【讨论】:
【参考方案2】:这取决于您的程序是如何完成的,但是如果您阅读手册中的 cmets,它将有助于解释函数的特性。
http://php.net/manual/en/function.property-exists.php
重要的部分在这里:
文档省略了 新楼盘的重要案例 在运行时添加到对象。实际上, property_exists 将返回 true 如果 你问它关于这些属性。
【讨论】:
我也更喜欢 isset 来测试属性是否为空以上是关于测试属性是不是存在的主要内容,如果未能解决你的问题,请参考以下文章