1. Archiv für Oktober, 2008 - Monatsarchiv

  2. 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 private oder protected deklarierte 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 ein var_export drumherum setzen, dann klappt das auch mit der Exception:

    throw new Exception(var_export(serialize($object), true));
  3. PHP5 Snippet: Mehrdimensionale Arrays zu eindimensionalen Arrays

    Stefan · 15.10.08, 18:30 Uhr · PHP · 3 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

Gehe zur polyCODER Startseite