web-dev-qa-db-fra.com

Activer 'strict_types' globalement dans PHP 7

Je suis en train de migrer mon site Web de PHP5 vers PHP7 et j'ai commencé à utiliser la fonctionnalité de saisie stricte qui a été ajoutée. Cependant, cela nécessite que je commence tous les fichiers avec la ligne suivante:

<?php declare(strict_types=1);

// All other code here
// ...

Alors je me demandais, est-il possible d'activer strict_types globalement en utilisant quelque chose comme php.ini ou le fichier de configuration Apache afin que je n'ai pas à écrire cette ligne à chaque fois, et si oui comment puis-je l'activer? 

31
Paradoxis

Ceci est délibérément impossible, car l’implémentation adoptée après une discussion extrêmement longue d’indications de type scalaire était la suivante: https://wiki.php.net/rfc/scalar_type_hints_v5

Il donne explicitement le choix de la manière dont les types scalaires sont vérifiés à l'appelant de n'importe quelle fonction, et non de son auteur, de sorte que:

  • si vous écrivez une bibliothèque avec des indications de type scalaire, vos fonctions auront la garantie que les types de paramètres demandés, même s'ils sont appelés par un code non écrit en mode strict (les types sont forcés à la place)
  • si vous écrivez une bibliothèque et souhaitez utiliser le typage faible traditionnel, vous pouvez toujours utiliser des bibliothèques qui utilisent des indications de type (car elles ne vous obligent pas à effectuer une vérification de type stricte).
  • au contraire, si vous écrivez une bibliothèque et souhaitez une saisie stricte pour les fonctions que vous appelez, vous n'avez pas à demander aux utilisateurs de votre bibliothèque d'activer également la saisie stricte.
  • les fonctions intégrées fonctionnent de la même manière que celles définies par l'utilisateur, et le code existant fonctionne de la même manière par défaut
  • si vous activez la frappe stricte, vous devez changer votre code pour le gérer correctement quand même

C'est donc à vous de dire à PHP quels fichiers ont été écrits pour utiliser le mode de type strict, et ceux qui ne l'ont pas encore été; Pour ce faire, utilisez l'instruction declare.

37
IMSoP

Essentiellement non. 

Parce que si vous n’avez besoin que de bibliothèques qui utilisaient le mode strict, vous provoquerez une séparation inutile des paquets.

1
Danilo Calzetta