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