我有一个从数据库初始化的类的层次结构。我使用__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()的功能,还是有更简单的方法?
如何在没有某种错误的情况下测试是否存在动态属性?
答案 0 :(得分:6)
有一个名为__isset()
的{{3}}与__get()
和__set()
的工作方式类似。它将允许您在动态属性上调用isset
答案 1 :(得分:3)
__ isset()是通过在不可访问的属性上调用isset()或empty()来触发的。
您可以定义__isset()
魔术方法来执行此操作。 See here