Anonyme Objekte mit PHP
28. Februar 2008 | In: Php
PHP bietet zwei simple Möglichkeiten um anonyme Objekte zu erzeugen. Diese sind immer dann sinnvoll nutzbar, wenn eine Funktion einen komplexen Wert zurückgibt, man aber nicht mit einem assoziativen Array arbeiten möchte.
Erzeugt wird das Object …
1. über einen Cast vom Type “Object”
$a = (object)null; var_dump( $a ); object(stdClass)#1 (0) { } |
2. über die Klasse stdClass
$b = new stdClass(); var_dump( $b ); object(stdClass)#2 (0) { } |
Die Ausgabe von var_dump() zeigt, das in beiden Fällen ein Objekt vom gleichen Typ erzeugt wird. Ich ziehe die 2. Methode vor, da diese besser zu schreiben und lesen ist als der Typecast.
Die so erzeugen Objekte machen nur Sinn, wenn man sie mit Eigenschaften versehen kann. Das geht wie sonst auch mit Objekten in PHP.
$b = new stdClass(); $b->id = 89; $b->timestamp = time(); var_dump( $b ); object(stdClass)#2 (2) { ["id"]=> int(89) ["timestamp"]=> int(1204223269) } |
Nutz man ein so erzeugtes Objekt als Rückgabewert einer Funktion, so sieht das wie folgt aus:
function Foo( $a, $b ) { $result = new stdClass(); $result->max = max( $a, $b ); return( $result ); } var_dump( Foo( 2, 3 ) ); object(stdClass)#3 (1) { ["max"]=> int(3) } |
Eine Möglichkeit, anonyme Objekte mit Methoden zu versehen habe ich bis dato leider nicht herausfinden können.

5 Kommentare zu Anonyme Objekte mit PHP
Fabian
16. November 2009 um 22:48:03
Mit create_function() bzw. mittels Lambda-Funktionen in PHP 5.3 sollten Methoden in stdClass kein Problem darstellen.
tarzanhb@twitter
05. August 2010 um 15:35:28
Mit create_function kann man aber keine Funktion auf ein stdClass Object hinzufügen.
PHP kann dies nicht korrekt interpretieren.
$foo = new stdClass;
$foo->bar = function(){ echo “bar”; };
oder
$foo->bar=create_function(”,’echo “bar”;’);
$foo->bar();
meldet einen Fehler beim aufruf von $foo->bar(); .
Steffen
17. August 2010 um 23:48:54
Kann ich denn eine stdClass auf eine eigene Klasse casten?
naden
18. August 2010 um 10:33:17
@tarzanhb, genau das habe ich auch geschrieben. Guck dir zum Thema auch mal @Fabians Kommentar an.
naden
18. August 2010 um 10:40:12
Mir ist kein Weg bekannt, was nicht bedeutet das es nicht gehen könnte. Warum willst du das machen?