PHP:isset()函数对于对象的动态属性返回false

4
我有一个从数据库初始化的类层次结构。我在一个共同的项目基类中使用带有数组的__get()和__set()来支持不同数量的属性。一个继承自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个回答

6

有一个魔法方法称为__isset(),它与__get()__set()类似。它将允许您在动态属性上调用isset。


所以我理解正确吗,你必须自己定义方法的功能,但是你称之为__isset()?当isset()找不到属性时,它会自动调用吗? - Sinthia V
正确。您可以在__isset中放置代码以检查您的动态属性。 - hair raisin

3

当对不可访问的属性调用isset()或empty()时,将触发__isset()。

您可以定义__isset()魔术方法来完成此操作。请参见此处


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接