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
Libérer: 2025-02-14 10:08:11
original
921 Les gens l'ont consulté

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:

function plusone($a) { return $a + 1; }
Copier après la connexion

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:

function plusone($a) { if (!is_numeric($a)) throw new InvalidArgumentException("Only numbers!"); return $a + 1; }
Copier après la connexion

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:

/**
 * @param int $a
 * @return int
 */
function plusone($a) { return $a + 1; }
Copier après la connexion

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 de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal