gpt4 book ai didi

php - 将对象转换为数组 - 奇怪的行为

转载 作者:行者123 更新时间:2023-12-02 02:46:18 25 4
gpt4 key购买 nike

我将一个对象转换为数组,之后我无法通过键访问结果数组。

这是代码

print_r($new);
$new = (array)$new;
echo $new['EPPContactemail'];

foreach($new as $attr=>$value)
{
echo "$attr => $value \n";
}

输出是

EPPContact Object
(
[id:EPPContact:private] => 6553377C74FC9899
[roid:EPPContact:private] => 50085436-UK
[status:EPPContact:private] => ok
[voice:EPPContact:private] => +44.554545454
[email:EPPContact:private] => some@email.com
[fax:EPPContact:private] =>
[clID:EPPContact:private] => TSOHOST
[crID:EPPContact:private] => EPP-TSOHOST
[crDate:EPPContact:private] => 2013-07-17T09:53:41
)

Notice: Undefined index: EPPContactemail in /home/parvhraban/domains/src/local_libs/EPP/Builder/Contact/Update.php on line 9
EPPContactid => 6553377C74FC9899
EPPContactroid => 50085436-UK
EPPContactstatus => ok
EPPContactvoice => +44.554545454
EPPContactemail => some@email.com
EPPContactfax =>
EPPContactclID => TSOHOST
EPPContactcrID => EPP-TSOHOST
EPPContactcrDate => 2013-07-17T09:53:41

我可以清楚地看到 EPPContactemail 键存在并保存该值,尽管在访问它时(第 3 行,echo 语句)它会抛出未定义索引的错误。

您能解释一下是什么原因导致了这种行为吗?

最佳答案

将对象转换为数组时,某些属性(私有(private)属性、 protected 属性和父属性)会分配给数组,其键如下所示:

*protected
ClassNamePrivate
ParentNameProperty

但它们实际上看起来像这样:

"\0*\0protected"
"\0ClassName\0Private"
"\0ParentName\0Property"

这就是导致您出现问题的原因。 替换:

echo $new['EPPContactemail'];

echo $new["\0EPPContact\0email"];

然后从那里拿走它。
请注意,您必须使用双引号作为字符串分隔符,因为 '\0' !== "\0",就像 '\n' !== "\n"

此行为记录在 php.net 上,though it's rather well hidden

关于php - 将对象转换为数组 - 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17695490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com