Activation globale des "types stricts" en PHP 7

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

<?php declare(strict_types=1);

// All other code here
// ...

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

27
demandé sur Paradoxis 2016-05-09 11:55:13

2 réponses

Ce n'est délibérément pas possible, car l'implémentation adoptée après une Extrêmement longue discussion de conseils de type scalaire était celle-ci: https://wiki.php.net/rfc/scalar_type_hints_v5

Il donne explicitement le choix de la façon dont les types scalaires sont vérifiés à l'appelant de n'importe quelle fonction, pas son auteur, de sorte que:

  • si vous écrivez une bibliothèque avec des astuces de type scalaire, vos fonctions sont garanties par les types de paramètres demandés, même si elles ne sont pas appelées par code écrit en mode strict (les types sont contraints à la place)
  • si vous écrivez une bibliothèque et que vous voulez un typage faible traditionnel, vous pouvez toujours utiliser des bibliothèques qui utilisent des astuces de type (car elles ne vous obligent pas à effectuer une vérification de type stricte)
  • au contraire, si vous écrivez une bibliothèque et que vous souhaitez une saisie stricte pour les fonctions que vous appelez , vous n'avez pas besoin d'exiger que les utilisateurs de votre bibliothèque activent également la saisie stricte
  • fonctions intégrées fonctionnent de la même manière que défini par l'utilisateur et le code existant fonctionne de la même manière par défaut
  • si vous activez la saisie stricte, vous devez changer votre code pour le gérer correctement de toute façon

C'est donc à vous de dire à PHP quels fichiers ont été écrits pour utiliser le mode Type strict, et lesquels ne l'ont pas fait; et la façon de le faire est d'utiliser l'instruction declare.

32
répondu IMSoP 2016-05-09 09:23:07

Essentiellement non.

Parce que si vous n'avez besoin que de bibliothèques utilisant le mode strict, vous provoquerez une séparation inutile des paquets. Considérez également l'option types stricts/faibles est juste un extra en PHP.

1
répondu Danilo Calzetta 2016-05-09 09:08:30