Type De L'Affinage: Les Paramètres Par Défaut
PHP 5 Type Hinting
PHP 5 introduit Type Hinting. Les fonctions sont maintenant en mesure de forcer les paramètres d'objets (en spécifiant le nom de la classe dans le prototype de fonction) ou arrays
(depuis PHP 5.1). Toutefois, si NULL
est utilisé comme valeur de paramètre par défaut, il sera admis comme un argument pour tout appel ultérieur.
L'extrait suivant de la ci-dessus:
si NULL
est utilisé comme valeur de paramètre par défaut, il sera admis comme un argument pour tout appel ultérieur.
N'est au-dessus de la moyenne:
si les paramètres par défaut sont utilisées d'une utilisation avec le type hinting, il ne peut avoir qu'ont NULL
comme valeur par défaut.
c'est à dire le code dans code1 est mauvais et les résultats dans:
Erreur fatale: valeur par Défaut pour les paramètres d'un type de classe de l'indice ne peut être NULL
code1:
function setName ( string $name = "happ") {
...
}
Où dans le code de l'code2 est droit:
code2:
function setName ( string $name = NULL) {
...
}
Pourquoi est-ce une contrainte attribué en php?
OriginalL'auteur ThinkingMonkey | 2011-12-15
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas typehint chaînes, vous ne pouvez typehint les objets et les tableaux, donc c'est faux:
(La raison pour laquelle vous n'obtenez pas une erreur de compilation ici, c'est parce que PHP est l'interprétation de "chaîne" comme le nom d'une classe.)
Le libellé dans les docs signifie que si vous faites cela:
Ensuite l'argument passé à foo() doit être une instance de l'objet Foo. Mais si vous faites cela:
Ensuite l'argument passé à foo() peut être soit une instance de l'objet Foo, ou la valeur null. Notez également que si vous faites cela:
Alors vous ne pouvez pas appeler foo(null). Si vous souhaitez cette fonctionnalité, vous pouvez faire quelque chose comme ceci:
[Edit 1]
Depuis PHP 5.4, vous pouvez typehintcallable
:[Edit 2]
PHP 7.0, vous pouvez typehintbool
,float
,int
, etstring
. Cela rend le code dans la question de syntaxe valide. Comme de PHP 7.1, vous pouvez typehintiterable
.Je veux juste dire aux futurs lecteurs qu'il est probable php support de type scalaire conseils dans une certaine forme dans un avenir proche, de sorte que cette réponse sera obsolète.
Nous sommes toujours en attente de type scalaire astuces en PHP 5.6.
Ils sont dans
Hack
! 🙂Type hinting chaînes et d'autres scalaires est maintenant possible en PHP 7, mais j'ai cette erreur lorsque je fais allusion
boolean $foo = true
parce qu'il doit êtrebool $foo = true
. I. e. cette erreur s'affiche lorsque le type n'est pas valide.OriginalL'auteur Alex Howansky
Les déclarations de Type (aussi connu comme type de conseils en PHP 5) d'un
string
type sont pris en charge en PHP 7.La les types valides sont:
self
(>=PHP 5.0.0);array
(>=PHP 5.1.0);callable
(>=PHP 5.4.0);bool
,float
,int
,string
(>=PHP 7.0.0);OriginalL'auteur kenorb
C'est une question de moment de la compilation du rapport de l'exécution de valeurs. Lors de la compilation uniquement des valeurs littérales (chaînes de caractères, nombres, booléens et NULL) sont autorisés. Le traitement PHP ne peut pas savoir à propos de toutes les classes possibles à cette époque et donc vous ne pouvez pas créer une instance d'un objet dans les arguments de la fonction.
Que j'attends de l'extrait, c'est que, normalement, le passage de la valeur NULL dans un type allusion fonction lève une Exception ou d'Erreur. Si vous définissez une valeur par défaut à NULL, alors il ne sera pas se débarrasser de cette exception, si NULL est passé. Je n'ai pas testé, juste ce que je m'attends.
This is a matter of compilation time versus run time values. At compilation only literal values (strings, numbers, booleans and NULL) are allowed.
<br/> Pour le deuxième alinéa, de se référer à la réponse ci-dessus.C'est un très désuet réponse.
OriginalL'auteur Chris