PHP : Passer null en argument d'une méthode typée

Le typage des arguments de fonctions a été introduit en PHP 5. Il reste cependant encore incomplet, surtout pour quelqu'un qui écrit du java à longueur de journée.

Prenons un exemple simple où l'API d'une classe permet de définir un objet quelconque :

namespace rnb\tests;

class MyObject { }

class MyClass
{
    private $object;
    
    public function getObject()
    {
        return $this->object;
    }
    
    public function setObject(MyObject $object)
    {
        $this->object = $object;
    }
}
Classe avec une API typée.

Utilisons l'API en passant null en paramètre :

$instance = new \rnb\tests\MyClass();
$instance->setObject(null);

Le code génère alors une erreur fatale :

fatal error: Argument 1 passed to rnb\tests\MyClass::setObject() 
must be an instance of rnb\tests\MyObject, null given

La même chose en java n'entrainera évidemment pas d'erreur. Pour contourner ce problème, il faut changer la signature du setter pour autoriser les valeurs nulles :

public function setObject(MyObject $object = null)
{
    $this->object = $object;
}
Autoriser null comme argument d'une méthode typée.

ACHOUR, Mehdi ; BETZ, Friedhelm ; DOVGAL, Antony, et al.. Type Hinting. PHP.net,