Blaubart: Type Hinting und optionale Parameter

Beitrag lesen

'Nabend.

Ich bin gerade beim Zusammenspiel von Type Hinting und optionalen Funktionsparametern in PHP 5 über ein Problem gestolpert, das ich nicht gelöst kriege. Dazu folgendes Beispiel:

  
class Foo {  
    function foobar (Foo $foo, Bar $bar, $baz = 0) {  
        echo 'Foobar!';  
    }  
}  
  
class Bar {  
    function blupp() {  
        echo 'Blupp!';  
    }  
}  
  
$bar = new Bar();  
$foo = new Foo();  
$foo->foobar($foo, null, 1);  

NULL ist offensichtlich nicht einsetzbar als eine Art Platzhalter für "leere" Objekte, analog zu '' bei Strings -- oder eben der Nullpointer in anderen Sprachen. PHP meckert mit einem "Fatal error: Argument 2 passed to Foo::foobar() must not be null".

Setze ich als zweite Variante im Funktionskopf...

function foobar (Foo $foo, Bar $bar = null, $baz = 0)

... gibt es das Gemecker nicht mehr in PHP 5.1, aber dafür in Version 5.0. Ob das tatsächlich von der Version abhängt oder doch an einem Unterschied in der Konfiguration liegt, konnte ich bisher nicht herausfinden.

Gibt es einen vernünftigen[TM] Weg, um ein Objekt in der Parameterliste wahlweise auszulassen oder anders eindeutig als Sonderfall zu kennzeichnen? $foo->foobar($foo, , 1) kann ich ja auch nicht schreiben -- weder für Objekte noch Primitivtypen. Solange ich nicht herausgefunden habe, woher die unterschiedlichen Reaktionen bei der zweiten Variante (s.o.) kommen, seh ich eigentlich nur den umständlichen Umweg über ein selbstgestricktes Dummyobjekt. Und _das_ möchte ich wirklich gerne vermeiden. ;)