Maison >développement back-end >tutoriel php >Pouvons-nous avoir des types statiques en PHP sans PHP 7 ou HHVM?

Pouvons-nous avoir des types statiques en PHP sans PHP 7 ou HHVM?

William Shakespeare
William Shakespeareoriginal
2025-02-14 10:08:11857parcourir

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.

Can We Have Static Types in PHP without PHP 7 or HHVM?

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):

  1. Système de mise à jour: sudo apt-get update
  2. Installez les dépendances: sudo apt-get install php5-dev bison flex
  3. cloner le repo: git clone git@github.com:box/augmented_types.git
  4. Installez l'extension: phpize; ./configure --enable-augmented_types; make; make test; sudo make install
  5. Activer l'extension dans 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.

Can We Have Static Types in PHP without PHP 7 or HHVM?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn