Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why can't I access the array with index directly?

Tags:

php

I got confused when I was trying to access an array element directly with its index. I guess I could explain it better in coding:-

I am having an object of Employee Class and I TypeCast it to array and tried to display it like this:

$arrOfObj = (array) $objEmployee;

$arrKeys = array_keys( $arrOfObj );

display( $arrOfObj ); // display() is a method in my library that prints an array in a mannered way.

this gives me the following output :-

Array
(
   [*m_UserId] => 1155
   [*m_EmailPassword] => 
   [*m_IsAssignedToManagementCompany] => 
   [*m_ManagementCompanyId] => 
   [*m_DepartmentId] => 3
   [*m_DesignationId] => 4
   [*m_EmployeeCompletedMonth] => 
   [*m_EmployeeCompletedDay] => 
   [*m_EmailAddress] =>[email protected]
   ------
   ------
 )

Now here I dont understand this Star(*). when my member variables are simple like m_UserId, m_EmialPassword and So on where from it gets this Star. and when I try to display the same with following 2 statements I got an error :-

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

or

display( $arrOfObj['m_EmailAddress'] );

Both give the Error message Undefined index: m_EmailAddress

And when i try to do it this way It works fine :-

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

The last one works fine, Can anyone explain me the problem.

            display( $arrOfObj[$arrKeys[11]] );
            display( $arrOfObj['m_strEmailAddress'] );
like image 407
ScoRpion Avatar asked Sep 20 '12 14:09

ScoRpion


1 Answers

If an object is converted to an array, the result is an array whose elements are the object's properties. The keys are the member variable names, with a few notable exceptions: integer properties are unaccessible; private variables have the class name prepended to the variable name; protected variables have a '*' prepended to the variable name. These prepended values have null bytes on either side.

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

Try var_dump(bin2hex($arrKeys[8])) for enlightenment. Also see the example in the above linked manual.

like image 83
deceze Avatar answered Oct 20 '22 00:10

deceze