2012-09-20 17 views
7

Mi sono confuso quando stavo cercando di accedere a un elemento di matrice direttamente con il suo indice. Credo che avrei potuto spiegarlo meglio nella codifica: -Perché non posso accedere direttamente alla matrice con indice?

Sto avendo un oggetto della classe Employee e ho typecast a matrice e ho cercato di visualizzare in questo modo:

$arrOfObj = (array) $objEmployee; 

$arrKeys = array_keys($arrOfObj); 

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

questo mi dà il seguente risultato : -

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

Ora qui non capisco questa stella (*). quando le mie variabili membro sono semplici come m_UserId, m_EmialPassword e così via da dove viene questa stella. e quando cerco di visualizzare lo stesso con i seguenti 2 affermazioni ho ottenuto un errore: -

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

o

display($arrOfObj['m_EmailAddress']); 

Entrambi danno il messaggio di errore Undefined index: m_EmailAddress

E quando provo a farlo in questo modo funziona bene: -

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

L'ultimo funziona bene, Qualcuno può spiegarmi il problema.

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

risposta

14

Se un oggetto viene convertito in una matrice, il risultato è una matrice i cui elementi sono proprietà dell'oggetto. Le chiavi sono i nomi delle variabili dei membri, con alcune eccezioni degne di nota: le proprietà dei numeri interi non sono accessibili; le variabili private hanno il nome della classe anteposto al nome della variabile; Le variabili protette hanno un '*' anteposto al nome della variabile. Questi valori preimpostati hanno byte nulli su entrambi i lati.

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

Prova var_dump(bin2hex($arrKeys[8])) per l'illuminazione. Vedi anche l'esempio nel manuale collegato sopra.

+0

Quindi, come posso accedere alle chiavi protette con l'array con la stella, e non ho risposto alle ultime 3 righe della mia domanda. – ScoRpion

+2

Se si ottiene il valore della chiave "reale" dalle chiavi estratte, ovviamente si ottiene la chiave corretta. Per formare tu stesso una chiave corretta, devi includere i byte NUL, in questo modo: '" \ 0 * \ 0m_strEmailAddress "'. – deceze

+6

È '" \ 0 * \ 0strThree "'. Le stringhe con doppia quotatura e i byte NUL sono attorno all'asterisco. – deceze

Problemi correlati