-
Archiv für Oktober, 2008 - Monatsarchiv
-
PHP5 Tipp: Serialisierte Objekte in Exceptions
Stefan · 28.10.08, 18:13 Uhr · Allgemeines, PHP, Programmierstil · Keine Kommentare
Wenn man in PHP5 ordentlich programmiert, dann tut man das in der Regel Objektorientiert und wirft bei Fehlern auch aussagekräftige Exceptions, um spätere Fehlerbehandlungen einfacher zu gestalten.
In einem meiner derzeitigen Projekte übergebe ich als Hilfsmittel hauptsächlich zum Debuggen in der Exception Message auch das serialisierte Objekt, das den Fehler verursacht hat. Solange man nur public Properties im Objekt hat, ist das auch alles kein Problem. Gestutzt hatte ich als die Exception geworfen wurde und mein serialisiertes Objekt einfach nur zur Hälfte in der Message stand. Schuld war der Geltungsbereich von Properties. Eine als
privateoderprotecteddeklarierte Eigenschaft wird serialisiert mit folgenden Flags gekennzeichnet:' . "\0" . 'oder' . "\0" . '*' . "\0" . '. Und genau das scheinen die Exceptions nicht zu mögen.Folgendes Testobjekt
class Test { protected $_property = array( 'id' => 12, 'content' => 'test' ); }erzeugt folgende Ausgabe in der Serialisierung:
'O:4:"Test":1:{s:12:"' . "\0" . '*' . "\0" . '_property";a:2:{s:2:"id";i:12;s:7:"content";s:4:"test";}}'Das Ganze jetzt in einer Exception gethrowt kam bei mir so an:
O:4:"Test":1:{s:12:"Lösung des Ganzen: Beim Throwen einer Exception statt einem
serialize($object)noch zusätzlich einvar_exportdrumherum setzen, dann klappt das auch mit der Exception:throw new Exception(var_export(serialize($object), true));
-
PHP5 Snippet: Mehrdimensionale Arrays zu eindimensionalen Arrays
Stefan · 15.10.08, 18:30 Uhr · PHP · 2 Kommentare
Man braucht immer mal wieder so kleine Helfer in Projekten, da diese eigentlich nützlichen Funktionen in PHP nicht integriert sind. Heute: Wie erzeuge ich aus einem mehrdimensionalen Array einen einfachen eindimensionalen Array der die Inhalte eines bestimmten Array Keys enthält:
» Kompletten Beitrag lesen

