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'] );
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With