ChrisB: unbekannte Schreibweise mit geschweiften Klammern

Beitrag lesen

Hi,

$page = new PAGE() // $page ist ein riesiges Array

$page->{'main'}['sub']['cont'] = 'abc'


>   
> Was macht diese Codezeile?  
  
Grundsätzlich braucht man die geschweiften Klammern an Stellen, an denen man auf Eigenschaften/Methoden zugreifen möchte, deren Name keinen in PHP gültigen Bezeichner darstellen.  
Das kann z.B. passieren, wenn man sich das Ergebnis einer Datenbank-Abfrage als Objekte liefern lässt. Ein Spaltenname wie "foo bar" lässt sich natürlich nicht über `$obj->foo bar`{:.language-php} ansprechen, das würde der Interpreter nicht verstehen.  
Also kann man an solchen Stellen zur geschweifte-Klammern-um-Literal-Schreibweise greifen – `$obj->{'foo bar'}`{:.language-php}  
  
Das ist das generelle Prinzip – nur in deinem Beispiel ist die Verwendung eher sinnfrei, denn `$page->main['sub']['cont'] = 'abc'`{:.language-php} hätte es dort ebenso getan.  
  
Außer einem Literal kann man natürlich auch den Namen einer Variablen angeben, wenn man dynamisch auf eine Eigenschaft/Methode zugreifen möchte. (Dazu braucht man dann aber idR. die geschweiften Klammern nicht, `$obj->{$foo}`{:.language-php} und `$obj->$foo`{:.language-php} wären äquivalent.) Das hat aber einen ähnlichen Unsauberkeitsfaktor wie variable Variablen, deshalb versucht man sowas zu vermeiden.  
  
MfG ChrisB  
  

-- 
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?