如何在PHP中发现构造错误的对象是否为空
我正在处理一个类反馈的对象。出于某种原因,该类会抛出一个具有编号属性(0、1、2等)的对象。我需要检查对象是否为空。标准技巧如何在PHP中发现构造错误的对象是否为空,php,object,Php,Object,我正在处理一个类反馈的对象。出于某种原因,该类会抛出一个具有编号属性(0、1、2等)的对象。我需要检查对象是否为空。标准技巧empty(get\u object\u vars($obj))不起作用,因为get\u object\u vars即使对象具有(编号的)属性,也会返回空数组 作为参考,我使用的对象是由Solenlight API的PHP接口的LegitorsZipCode方法返回的对象。您可以看到示例响应的打印。\r。根据代码判断,作者犯了将数字索引数组强制转换为对象的错误。这使得按名称
empty(get\u object\u vars($obj))
不起作用,因为get\u object\u vars
即使对象具有(编号的)属性,也会返回空数组
作为参考,我使用的对象是由Solenlight API的PHP接口的LegitorsZipCode方法返回的对象。您可以看到示例响应的打印。\r。根据代码判断,作者犯了将数字索引数组强制转换为对象的错误。这使得按名称获取对象属性变得不可能,尽管您应该仍然能够对其进行
foreach
。您还可以简单地将其转换回数组:$results=(array)$obj代码>。然后,计数
数组。这似乎起作用:
if (current($obj) === false)
echo "is empty\n";
它可能对数组进行隐式转换。这就是为什么不将数字索引数组转换为对象。虽然您可以将对象强制转换回数组…请注意,强制转换到数组将为您提供字符串键$foo[“0”]
,而不是$foo[0]
@bob the destroyer,我明白您的意思了<代码>$foo=(数组)$obj
不同于$foo->{0}='bar'代码>,这很奇怪。我现在已经删除了我的答案,因为除了将其转换为数组之外,我不知道还有什么其他方法。@konforce:所以界面现在出了问题,所以我放弃了尝试来解释一个证明。但是是的,这里讨论的都是密钥/属性名的类型。+1。我认为将其转换为显式数组是最好的方法。我可能会简单地覆盖原始对象$obj=(array)$obj
,并按照powers的意图使用它。