J'ai vu la nouvelle ligne suivante dans PHP 7, mais personne n'explique vraiment ce que cela signifie. Je l'ai googlé et tout ce dont ils parlent est de savoir si vous l'activez ou non comme un sondage.
declare(strict_types = 1);
Qu'est ce que ça fait? Comment cela affecte-t-il mon code? Devrais-je le faire?
Une explication serait bien.
php
php-7.2
strong-typing
weak-typing
sufuko
la source
la source
Réponses:
Du blog Treehouse :
Par défaut, PHP convertit les valeurs du mauvais type dans le type scalaire attendu si possible. Par exemple, une fonction qui reçoit un entier pour un paramètre qui attend une chaîne obtiendra une variable de type chaîne.
Types stricts désactivés ( eval ):
Il est possible d'activer le mode strict sur une base par fichier. En mode strict, seule une variable de type exact de la déclaration de type sera acceptée, ou une TypeError sera levée. La seule exception à cette règle est qu'un entier peut être donné à une fonction qui attend un float. Les appels de fonction depuis les fonctions internes ne seront pas affectés par la déclaration strict_types.
Pour activer le mode strict, l'instruction declare est utilisée avec la déclaration strict_types:
Types stricts activés ( eval ):
Exemple de travail:
la source
strict_types
affecte la coercition de type.L'utilisation d'indices de type sans
strict_types
peut conduire à des bogues subtils.Avant les types stricts,
int $x
signifiait "$x
doit avoir une valeur coercible à un int". Toute valeur qui pourrait être forcée à unint
passerait l'indicateur de type, y compris:242
),10.17
),true
),null
, ou"13 Ghosts"
).En définissant
strict_types=1
, vous indiquez au moteur queint $x
"$ x ne doit être qu'un int proprement dit, aucune contrainte de type n'est autorisée." Vous avez la grande assurance d'obtenir exactement et uniquement ce qui a été donné, sans aucune conversion ni perte potentielle.Exemple:
Donne un résultat potentiellement déroutant:
La plupart des développeurs s'attendraient, je pense, à un
int
indice signifiant "seulement un int". Mais ce n'est pas le cas, cela signifie "quelque chose comme un int". L'activation de strict_types donne le comportement attendu et souhaité probable:Rendements:
Je pense qu'il y a deux leçons ici, si vous utilisez des indices de type:
strict_types=1
, toujours.strict_types
pragma.la source
strict_types
.