Maison >développement back-end >tutoriel php >Pouvons-nous avoir des types statiques en PHP sans PHP 7 ou HHVM?
Cet article explore les défis de la sécurité des types dans PHP 5 et introduit l'extension "Types augmentées" comme solution. Alors que PHP 7 propose des déclarations de type scalaire intégré, cette extension offre des fonctionnalités similaires pour les versions PHP plus anciennes.
Le problème: Typage faible dans PHP 5
Le typage dynamique de PHP 5 peut conduire à un comportement inattendu. Considérez une fonction conçue pour incrémenter un nombre:
<code class="language-php">function plusone($a) { return $a + 1; }</code>
Cette fonction accepte divers types d'entrée et effectue une conversion de type implicite. L'ajout de vérification de type robuste nécessite une validation manuelle:
<code class="language-php">function plusone($a) { if (!is_numeric($a)) throw new InvalidArgumentException("Only numbers!"); return $a + 1; }</code>
PHP 5 manque également d'application automatique du type de retour.
Types augmentés: une solution PHP 5
L'extension "Types augmentées" de l'équipe de la boîte exploite les annotations PHPDOC pour appliquer la sécurité du type à l'exécution. Il évite les modifications de base ou la formulation.
Installation (pour PHP 5):
Suivez ces étapes (exemple d'Ubuntu, adapter pour d'autres systèmes):
sudo apt-get update
sudo apt-get install php5-dev bison flex
git clone git@github.com:box/augmented_types.git
phpize; ./configure --enable-augmented_types; make; make test; sudo make install
php.ini
(trouver son emplacement en utilisant php -i | grep 'Loaded Configuration File'
): ajouter zend_extension=/path/to/augmented_types.so
. Activer l'extension par fichier avec ini_set("augmented_types.enforce_by_default", 1);
ou globalement dans php.ini
.
Utilisation:
Les types augmentés utilisent PHPDOC pour les déclarations de type. Par exemple:
<code class="language-php">/** * @param int $a * @return int */ function plusone($a) { return $a + 1; }</code>
Maintenant, passer un non-entiment à plusone()
entraînera une erreur d'exécution. L'extension prend en charge les types composites (@param int|float $a
), les types de tableau (@param int[] $a
) et l'application des types de retour, y compris @return void
.
Ignorer les fichiers:
pour empêcher les erreurs des bibliothèques externes, utilisez augmented_types_blacklist()
ou les directives augmented_types.blacklist
et augmented_types.whitelist
dans php.ini
pour gérer quels fichiers sont vérifiés.
php 7 et au-delà:
Le type intégré de PHP 7 rend le type de type cette extension en grande partie inutile pour les nouveaux projets. Cependant, les «types augmentés» offrent des fonctionnalités non trouvées dans PHP 7, telles que les déclarations composites et de types de tableau. N'oubliez pas qu'il ajoute des frais généraux d'exécution et doit être utilisé principalement pendant le développement et les tests.
Conclusion:
Alors que PHP 7 offre une sécurité de type supérieur, l'extension "Types augmentées" offre une solution précieuse pour maintenir la sécurité de type dans les applications héritées PHP 5. Ses fonctionnalités supplémentaires se font au prix des performances, ce qui le rend idéal pour le développement et les tests, mais pas pour les environnements de production.
Questions fréquemment posées (FAQ): (Celles-ci sont déjà bien couvertes dans le texte d'origine, donc je ne les répéterai pas ici. La section FAQ d'origine est complète.)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!