2012-09-20 4 views
7

Ich war verwirrt, als ich versuchte, direkt mit dem Index auf ein Array-Element zuzugreifen. Ich glaube, ich es bei der Codierung besser erklären könnte: -Warum kann ich nicht direkt auf das Array mit dem Index zugreifen?

ich ein Objekt der Klasse Employee habe und ich typisierte es Array und versuchte es so anzuzeigen:

$arrOfObj = (array) $objEmployee; 

$arrKeys = array_keys($arrOfObj); 

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

das gibt mir die folgende Ausgabe : -

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

Jetzt hier verstehe ich nicht diesen Stern (*). wenn meine Mitgliedsvariablen einfach sind wie m_UserId, m_EmialPassword und So weiter, woher dieser Stern kommt. und wenn ich versuche, das gleiche angezeigt mit folgenden 2-Anweisungen bekam ich einen Fehler: -

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

oder

display($arrOfObj['m_EmailAddress']); 

Beide geben die Fehlermeldung Undefined index: m_EmailAddress

Und wenn ich es auf diese Weise versuche, funktioniert es gut: -

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

Der letzte funktioniert gut, kann mir jemand das Problem erklären.

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

Antwort

14

Wenn ein Objekt in ein Array umgewandelt wird, ist das Ergebnis eine Matrix, deren Elemente die Eigenschaften des Objekts. Die Schlüssel sind die Namen der Mitgliedsvariablen, mit einigen bemerkenswerten Ausnahmen: Integer-Eigenschaften sind nicht zugänglich; Bei privaten Variablen wird der Klassenname dem Variablennamen vorangestellt. geschützte Variablen haben ein '*' vor dem Variablennamen. Diese vorangestellten Werte haben auf jeder Seite null Byte.

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

var_dump(bin2hex($arrKeys[8])) für Erleuchtung Versuchen. Siehe auch das Beispiel im oben verlinkten Handbuch.

+0

Dann wie kann ich auf die Array-geschützten Tasten mit Stern zugreifen, und Sie haben nicht auf die letzten 3 Zeilen meiner Frage geantwortet. – ScoRpion

+2

Wenn Sie den Schlüsselwert "real" von den extrahierten Schlüsseln erhalten, erhalten Sie offensichtlich den richtigen Schlüssel. Um einen korrekten Schlüssel selbst zu bilden, müssen Sie die NUL-Bytes wie folgt einschließen: '" \ 0 * \ 0m_strEmailAddress "'. – deceze

+6

Es ist '" \ 0 * \ 0strThree "'. Doppelte Zeichenfolgen in Anführungszeichen und die NUL-Bytes sind um den Stern herum angeordnet. – deceze

Verwandte Themen