9

当我试图用它的索引直接访问一个数组元素时,我感到很困惑。我想我可以在编码中更好地解释它:-

我有一个员工类的对象,我将它的类型转换为数组并尝试像这样显示它:

$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 等等,它从哪里得到这个 Star。当我尝试使用以下 2 条语句显示相同内容时,出现错误:-

display( $arrOfObj['*m_EmailAddress'] );

或者

display( $arrOfObj['m_EmailAddress'] );

两者都给出错误消息Undefined index: m_EmailAddress

当我尝试这样做时,它工作正常:-

display( $arrOfObj[$arrKeys[8]] );

最后一个工作正常,谁能解释我的问题。

            display( $arrOfObj[$arrKeys[11]] );
            display( $arrOfObj['m_strEmailAddress'] );
4

1 回答 1

18

如果将对象转换为数组,则结果是一个数组,其元素是对象的属性。键是成员变量名,有几个值得注意的例外:整数属性不可访问;私有变量在变量名前面加上类名;受保护的变量在变量名前有一个“*”。这些前置值在两边都有空字节。

http://php.net/manual/en/language.types.array.php#language.types.array.casting

尝试var_dump(bin2hex($arrKeys[8]))启蒙。另请参阅上述链接手册中的示例。

于 2012-09-20T14:20:12.220 回答