当我尝试直接使用索引访问数组元素时,我感到困惑.我想我可以在编码中更好地解释它: -
我有一个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.
Run Code Online (Sandbox Code Playgroud)
这给了我以下输出: -
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
------
------
)
Run Code Online (Sandbox Code Playgroud)
现在我在这里不明白这个星(*).当我的成员变量很简单时,如m_UserId,m_EmialPassword等等,从中得到这个星.当我尝试用以下2个语句显示相同时我得到一个错误: -
display( $arrOfObj['*m_EmailAddress'] );
Run Code Online (Sandbox Code Playgroud)
要么
display( $arrOfObj['m_EmailAddress'] );
Run Code Online (Sandbox Code Playgroud)
两者都给出错误消息未定义索引:m_EmailAddress
当我尝试这样做它工作正常: -
display( $arrOfObj[$arrKeys[8]] );
Run Code Online (Sandbox Code Playgroud)
最后一个工作正常,任何人都可以解释我的问题.
display( $arrOfObj[$arrKeys[11]] );
display( $arrOfObj['m_strEmailAddress'] );
Run Code Online (Sandbox Code Playgroud)
dec*_*eze 15
如果将对象转换为数组,则结果是一个数组,其元素是对象的属性.键是成员变量名,有一些值得注意的例外:整数属性是不可访问的; 私有变量的类名前置于变量名; 受保护的变量在变量名前面加上'*'.这些前置值在任一侧都有空字节.
http://php.net/manual/en/language.types.array.php#language.types.array.casting
尝试var_dump(bin2hex($arrKeys[8]))启蒙.另请参阅上面链接手册中的示例.