9

配列要素にそのインデックスで直接アクセスしようとしたときに混乱しました。私はコーディングでそれをよりよく説明できると思います:-

私はEmployeeClassのオブジェクトを持っていて、それを配列に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'] );

どちらもエラーメッセージUndefinedindex:m_EmailAddressを表示します

そして、私がこのようにそれをやろうとすると、それはうまくいきます:-

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

最後のものはうまくいきます、誰かが私に問題を説明できますか?

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

1 に答える 1

18

オブジェクトが配列に変換されると、結果は、要素がオブジェクトのプロパティである配列になります。キーはメンバー変数名ですが、いくつかの注目すべき例外があります。整数プロパティにはアクセスできません。プライベート変数には、変数名の前にクラス名が付加されます。保護された変数には、変数名の前に「*」が付いています。これらの付加値には、両側にnullバイトがあります。

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

var_dump(bin2hex($arrKeys[8]))悟りを試みなさい。上記のリンクされたマニュアルの例も参照してください。

于 2012-09-20T14:20:12.220 に答える