Я запутался, когда пытался получить доступ к элементу массива напрямую с его индексом. Думаю, я мог бы лучше объяснить это в кодировании:
У меня есть объект Employee Class, и я TypeCast его массив и попытался отобразить его следующим образом:
$arrOfObj = (array) $objEmployee; $arrKeys = array_keys( $arrOfObj ); display( $arrOfObj ); // display() is a method in my library that prints an array in a mannered way.
это дает мне следующий результат: –
Array ( [*m_UserId] => 1155 [*m_EmailPassword] => [*m_IsAssignedToManagementCompany] => [*m_ManagementCompanyId] => [*m_DepartmentId] => 3 [*m_DesignationId] => 4 [*m_EmployeeCompletedMonth] => [*m_EmployeeCompletedDay] => [*m_EmailAddress] =>showket.mca@gmail.com ------ ------ )
Теперь я не понимаю эту Звезду (*). когда мои переменные-члены просты, как m_UserId, m_EmialPassword и т. д., где от него получает эту Звезду. и когда я пытаюсь отобразить то же самое со следующими 2 заявлениями, я получил ошибку: –
display( $arrOfObj['*m_EmailAddress'] );
или
display( $arrOfObj['m_EmailAddress'] );
Оба дают сообщение об ошибке Неопределенный индекс: m_EmailAddress
И когда я пытаюсь сделать это таким образом, он отлично работает:
display( $arrOfObj[$arrKeys[8]] );
Последний работает отлично, может ли кто-нибудь объяснить мне проблему.
display( $arrOfObj[$arrKeys[11]] ); display( $arrOfObj['m_strEmailAddress'] );
Если объект преобразуется в массив, результатом является массив, элементами которого являются свойства объекта. Ключи – это имена переменных-членов, с несколькими заметными исключениями: целочисленные свойства недоступны; частные переменные имеют имя класса, добавленное к имени переменной; защищенные переменные имеют «*», добавленные к имени переменной. Эти предварительные значения имеют нулевые байты с обеих сторон.
http://php.net/manual/en/language.types.array.php#language.types.array.casting
Попробуйте var_dump(bin2hex($arrKeys[8]))
для просветления. Также см. Пример в приведенном выше руководстве.