4

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

当我想测试这些属性是否存在时,问题就来了。当我使用类似的代码时

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() 的功能,还是有更直接的方法?

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

4

2 回答 2

6

有一种名为的魔术方法与和__isset()类似。它会让你在你的动态属性上调用 isset__get()__set()

于 2011-10-23T03:06:55.643 回答
3

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

您可以定义__isset()魔术方法来做到这一点。见这里

于 2011-10-23T03:15:05.383 回答