PHP 7.1 ou plus récent (publié le 2 décembre 2016)
Vous pouvez déclarer explicitement une variable null
avec cette syntaxe
function foo(?Type $t) {
}
cela se traduira par
$this->foo(new Type());
$this->foo(null);
$this->foo();
Donc, si vous voulez un argument optionnel, vous pouvez suivre la convention Type $t = null
tandis que si vous devez faire en sorte qu'un argument accepte les deux null
et son type, vous pouvez suivre l'exemple ci-dessus.
Vous pouvez en savoir plus ici .
PHP 7.0 ou plus ancien
Vous devez ajouter une valeur par défaut comme
function foo(Type $t = null) {
}
De cette façon, vous pouvez lui passer une valeur nulle.
Ceci est documenté dans la section du manuel sur les déclarations de type :
La déclaration peut être faite pour accepter des NULL
valeurs si la valeur par défaut du paramètre est définie sur NULL
.
function foo(Type $t)
est une TRÈS bonne chose; voir Null References: The Billion Dollar MistakeÀ partir de PHP 7.1, les types Nullable sont disponibles, comme les types de retour de fonction et les paramètres. Le type
?T
peut avoir des valeurs du type spécifiéT
, ounull
.Ainsi, votre fonction pourrait ressembler à ceci:
function foo(?Type $t) { }
Dès que vous pouvez travailler avec PHP 7.1, cette notation doit être préférée
function foo(Type $t = null)
, car elle oblige toujours l'appelant à spécifier explicitement un argument pour le paramètre$t
.la source
Essayer:
function foo(Type $t = null) { }
Découvrez les arguments de la fonction PHP .
la source
Comme d'autres réponses déjà mentionnées, cela n'est possible que si vous spécifiez
null
comme valeur par défaut.Mais la solution orientée objet de type sécurisé la plus propre serait un NullObject :
interface FooInterface { function bar(); } class Foo implements FooInterface { public function bar() { return 'i am an object'; } } class NullFoo implements FooInterface { public function bar() { return 'i am null (but you still can use my interface)'; } }
Usage:
function bar_my_foo(FooInterface $foo) { if ($foo instanceof NullFoo) { // special handling of null values may go here } echo $foo->bar(); } bar_my_foo(new NullFoo);
la source
NullFoo
à remplacer les méthodes abstraites, même si elles n'ont pas de sens (par définition denull
).if (something is null)
vérifications, car le NullObject est destiné à couvrir tous les comportements d'une valeur inexistante et tout collaborateur extérieur ne devrait pas avoir besoin de se demander si un l'objet est inexistant (nul) ou non.