Передача объекта в массив – странное поведение

Я бросаю объект в массив, и после этого я не могу получить доступ к результирующему массиву с помощью ключа.

Это код

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, хотя оно довольно хорошо скрыто