2012-09-20 14 views
7

Byłem zdezorientowany, gdy próbowałem uzyskać dostęp do elementu tablicy bezpośrednio z jego indeksem. Chyba mogę to wytłumaczyć lepiej kodowania: -Dlaczego nie mogę uzyskać dostępu do tablicy z indeksem bezpośrednio?

Mam obiekt klasy Employee i typecast go do tablicy i próbował wyświetlić go tak:

$arrOfObj = (array) $objEmployee; 

$arrKeys = array_keys($arrOfObj); 

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

to daje mi następujący wynik : -

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

Teraz nie rozumiem tej Gwiazdy (*). kiedy moje zmienne składowe są proste jak m_UserId, m_EmialPassword i So on, skąd pochodzi ta Gwiazda. i gdy próbuję wyświetlić to samo z 2 następujących stwierdzeń mam błąd: -

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

lub

display($arrOfObj['m_EmailAddress']); 

dadzą się komunikat o błędzie Undefined index: m_EmailAddress

A kiedy próbuję to zrobić w ten sposób Działa to dobrze: -

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

Ten ostatni działa dobrze, Czy ktoś może mi wyjaśnić problem.

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

Odpowiedz

14

Jeżeli obiekt jest przekształcany do tablicy, to wynik jest macierzą, której elementy są właściwości obiektu. Klucze są nazwami zmiennych składowych, z kilkoma ważnymi wyjątkami: właściwości liczb całkowitych są niedostępne; zmienne prywatne mają nazwę klasy poprzedzoną nazwą zmiennej; zmienne chronione mają "*" przedrostka nazwy zmiennej. Te wartości z góry mają po każdej stronie wartość zerową.

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

Spróbuj var_dump(bin2hex($arrKeys[8])) dla oświecenia. Zobacz także przykład w powyższej instrukcji dołączonej.

+0

Jak mogę uzyskać dostęp do kluczy chronionych tablicą gwiazdką, a ty nie odpowiedziałeś na ostatnie 3 linijki mojego pytania. – ScoRpion

+2

Jeśli otrzymasz "prawdziwą" wartość klucza z wyodrębnionych kluczy, oczywiście otrzymasz właściwy klucz. Aby samemu utworzyć poprawny klucz, musisz dołączyć bajty NUL, takie jak: '" \ 0 * \ 0m_strEmailAddress "'. – deceze

+6

To '' \ 0 * \ 0strThree "'. Podwójnie cytowane ciągi i bajty NUL znajdują się wokół gwiazdki. – deceze

Powiązane problemy