Ist $order ein Objekt der Klasse order?

Weil ich gerade drübergestolpert bin und erstmal etwas googlen musste, hier als kleine Gedankenstütze für mich (und für alle, die es interessiert :-)

Es kommt ja häufiger mal vor, dass PHP – aus welchen Gründen auch immer – eine Variable mal als Objekt der (Standard-)Klasse stdClass erstellt. Wieso das so ist? Keine Ahnung – ich hatte bisher auch keine Zeit das zu untersuchen. Wenn ihr es wisst, bitte gleich erklären, danke :-) Um nun eine bestimmte Methode der (gewünschten) Klasse aufzurufen, ohne einen Fatal error zu erhalten, ist es ratsam, zuerst zu prüfen, ob die Variable auch vom richtigen Typ (bzw. von der richtigen Klasse) ist.

Die Funktion, um zu prüfen, ob ein Objekt eine Instanz einer bestimmten Klasse ist, heißt ganz einfach instanceof. Wer noch Anwendungen vor PHP 5 einsetzt, muss auf die Funktion is_a zurückgreifen. Die Beschreibung zu instanceof ist leider sehr versteckt und nicht so ganz einfach in der sehr umfassenden PHP-Dokumentation zu finden.

Beispiele:

if( $order instanceof order ) {
$order->doSomething();
}

oder mit is_a

if( is_a( $order, ‚ order‘ ) {
$order->doSomething();
}

Für mich ist die instanceof-Nutzung deutlich hübscher und auch logischer, denn immerhin ist es objektorientiert (klar, man könnte sagen, das ist mit Klassen auch der Fall). Objektorientiert ist aber nicht nur bequem sondern auch sehr elegant – finde ich jedenfalls. Das hat auch Stefan Priebsch auf dem PHP World Kongress so vertreten, Tobias Schlitt hat das fürs Unit-Testen mit PHPUnit nur bestätigt.

Ähnliche Beiträge:

Über Markus Zierhut

Life Is What You Make It!
Dieser Beitrag wurde unter Arbeit, PHP abgelegt und mit , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

2 Kommentare zu Ist $order ein Objekt der Klasse order?

  1. Mathias Methner sagt:

    Die Frage nach dem Typ eines Objekts stellt sich überhaupt nicht, wenn das Objekt als Methodenparameter mit einem typehint versehen wurde. (wenn nicht gibts eh einen parse error)
    In jeden anderen Fall sollte die Objektvariable nicht existieren, wenn man sie nicht selbst erzeugt hat.
    Von daher, und hoffentlich lehne ich mich nicht zu weit aus dem Fenster, hat der instanceof Operator doch eher einen defensiven Charakter, wenn man aus welchen Gründen auch immer sich nicht sicher sein kann woher eine Variable kommt.

  2. Hallo Matthias,

    im vorliegenden Fall konnte bzw. kann man leider nie so sicher sein, was da in einer Variablen drinsteht oder drinstehen könnte.
    Deswegen prüfe, wer sich bindet ;-) Ach, geht mit PHP ja gar nicht…

    Danke für deinen Beitrag!

    Gruß und guten Rutsch,
    Markus

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.