Приведение объекта в массив - странное поведение
Я приведу объект в массив, и после этого я не могу получить доступ к массиву по ключу.
Это код
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) он выдает ошибку неопределенного индекса.
Не могли бы вы объяснить мне, что вызывает такое поведение?
1 ответ
При приведении объекта к массиву определенные свойства (частные, защищенные и родительские свойства) назначаются массиву с ключами, которые выглядят следующим образом:
*protected
ClassNamePrivate
ParentNameProperty
Но они действительно выглядят так:
"\0*\0protected"
"\0ClassName\0Private"
"\0ParentName\0Property"
Вот что вызывает ваши проблемы здесь.
Заменить:
echo $new['EPPContactemail'];
с
echo $new["\0EPPContact\0email"];
И возьми это оттуда.
Обратите внимание, что вам придется использовать двойные кавычки в качестве ограничителей строк, потому что '\0' !== "\0"
, как только '\n' !== "\n"
Это поведение задокументировано на php.net, хотя оно довольно хорошо скрыто