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;
}
}
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;
}
- Titre
- Type Hinting
- Éditeur
- PHP.net