PHP:isset()为对象的动态属性返回false

时间:2011-10-23 03:03:25

标签: php isset dynamic-properties

我有一个从数据库初始化的类的层次结构。我使用__get()和__set()与公共Item基类中的数组来支持不同数量的属性。一个派生自Item的类,UserProfile用于存储用户数据。我的数据库中有一个电话号码表,与用户表有一对多的关系,可以为一个用户存储多个电话号码。如果有移动电话,则UserProfile对象具有移动字段。家庭和企业也一样。如果不存在数字,则不存在任何属性。

当我想测试这些属性的存在时,问题出现了。当我使用像

这样的代码时
if (isset($clientData->home_phone))
{
$this->startElement('phone');
$this->writeAttribute('phone_number_type','home');
$this->writeRaw($clientData->home_phone);
$this->endElement();
}

该函数始终返回false。我尝试使用括号告诉php先获取变量,但我只是出错了。我是否需要一个特殊的attributeExists()函数来模拟isset()的功能,还是有更简单的方法?

如何在没有某种错误的情况下测试是否存在动态属性?

2 个答案:

答案 0 :(得分:6)

有一个名为__isset()的{​​{3}}与__get()__set()的工作方式类似。它将允许您在动态属性上调用isset

答案 1 :(得分:3)

  

__ isset()是通过在不可访问的属性上调用isset()或empty()来触发的。

您可以定义__isset()魔术方法来执行此操作。 See here