测试属性是不是存在

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中使用它会返回falseisset 将在 两个 实例中返回 false

【讨论】:

【参考方案2】:

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

http://php.net/manual/en/function.property-exists.php

重要的部分在这里:

文档省略了 新楼盘的重要案例 在运行时添加到对象。实际上, property_exists 将返回 true 如果 你问它关于这些属性。

【讨论】:

我也更喜欢 isset 来测试属性是否为空

以上是关于测试属性是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

测试嵌套 JavaScript 对象键是不是存在

测试嵌套 JavaScript 对象键是不是存在

TypeError:无法读取未定义的属性“存在”

检查属性文件是不是存在并具有所需的属性

jquery怎么判断一个属性是不是存在

typescript 测试DOM中属性的存在