
Lorsque les gens discutent des changements dans PHP7, la chose la plus courante que vous entendez est un moteur considérablement amélioré, qui offre une vitesse d'exécution plus rapide et beaucoup moins de mémoire lors de la comparaison des applications PHP courantes comme Drupal, WordPress et MediaWiki.
Ne vous méprenez pas, c'est bien sûr génial! J'ai réussi à migrer plusieurs applications CodeIgniter héritées vers PHP7 et à obtenir de bien meilleures performances avec quelques changements dans la base de code. Cependant, PHP7 ajoute également plusieurs nouvelles fonctionnalités qui peuvent aider à optimiser le code existant ou à améliorer la qualité de l'écriture de nouveau code. Ici, j'ai décrit plusieurs de mes fonctionnalités sélectionnées.
ParamÚtre scalaire et retour du type déclaré
PHP avait des déclarations de type jusqu'à la version 7, mais était limité uniquement aux objets et aux tableaux. PHP7 prend désormais en charge tous les types scalaires et propose deux déclarations de type différentes.
Forcé:
c'est le type de déclaration par défaut et signifie simplement que le runtime PHP essaiera de transtyper des valeurs si nécessaire. Prenez, par exemple, le code suivant.
<?php function reverseString(String $str) : String { return strrev($str); } print(reverseString(1234));
Nous indiquons que le paramĂštre $str
doit ĂȘtre de type String
et que la valeur de retour doit Ă©galement ĂȘtre de type String
. Par conséquent, lorsque nous passons le nombre 1234, il est traduit de force dans la chaßne "1234" et traduit sans erreur.
Strict:
Le deuxiĂšme type strict est activĂ© Ă l'aide de l'indicateur ajoutĂ© au dĂ©but de chaque fichier. Lorsqu'il est activĂ©, l'interprĂ©teur ne convertit pas le type, comme dans l'exemple ci-dessus, il rĂ©pond avec une erreur et arrĂȘte le script.
<?PHP declare(strict_types = 1); function reverseString(String $str): String { return strrev($str); } print (reverseString(1234));
En ajoutant une seule déclaration declare
au tout dĂ©but du fichier, dans le mĂȘme code que prĂ©cĂ©demment, nous obtenons maintenant le message d'erreur suivant:
Erreur fatale: TypeError non interceptĂ©: l'argument 1 passĂ© Ă reverseString () doit ĂȘtre de type chaĂźne, entier donnĂ©
Un petit ajout: lorsque vous activez le mode strict, cela s'applique également aux fonctions intégrées et aux fonctions PHP chargées à partir des extensions.
Opérateur nul ??
Contrairement Ă certains langages, oĂč vous pouvez utiliser le nom de la variable comme expression dans l'expression if
et supposer en toute sécurité que si la valeur n'est pas définie ou vide, alors la valeur sera false
, PHP générera une erreur concernant une variable, un index, etc. non défini. Cela le rend trÚs bavard, un code régulier utilisant if
que d'autres langues, comme dans l'exemple suivant.
<?php if(!isset($_GET['key'])) { $key = 'default-value'; } else { $key = $_GET['key']; }
MĂȘme lors de l'utilisation de l'opĂ©rateur ternaire, la fonction isset
est requise. Avec le nouvel opérateur nul ??
vous pouvez grandement faciliter le code:
<?PHP $key = $_GET['key'] ?? 'default_value';
Cette utilisation est encore plus efficace pour chaßner des cas qui nécessitent une ou plusieurs autres if
.
<?php if (isset($_GET['key']) { $key = $_GET['key']; } else if(isset($_POST['key'])) { $key = $_POST['key']; } else { $key = 'default value'; }
Petit ajout: si vous travaillez avec JavaScript, vous pouvez faire des choses comme ceci:
const value = 0 || false || 'hello'; console.log(value);
Cela ne fonctionnera pas en PHP et un code PHP équivalent mettra la valeur à 0, car le nouvel opérateur ne fonctionne qu'avec null
valeurs null
.
Déclarations d'utilisation de groupe
Dans les versions précédentes de PHP, vous ne pouviez importer qu'un seul élément (classe, fonction, constante) à partir d'un espace de noms spécifique dans une seule expression à l'aide de la déclaration d'utilisation. Cela a souvent conduit à un code trÚs répétitif, comme dans l'exemple ci-dessous.
<?php use VendorName/LibraryName/ClasName1; use VendorName/LibraryName/ClasName2; use VendorName/LibraryName/ClasName3;
Lors du regroupement, ce qui prĂ©cĂšde peut ĂȘtre abrĂ©gĂ©, comme indiquĂ© dans l'exemple ci-dessous, ce qui vous permet d'obtenir un code plus propre et plus intuitif de ce qui est importĂ© et d'oĂč.
<?php use VendorName/LibraryName/{ClasName1, ClassName2. ClassName3};
Tableaux constants
Les constantes nommĂ©es sont un outil trĂšs prĂ©cieux en PHP. Un cas d'utilisation courant consiste Ă amĂ©liorer la lisibilitĂ© du code en fournissant des noms sĂ©mantiques pour des donnĂ©es arbitraires, telles que les couleurs, les valeurs RVB ou les nombres magiques dans le code qui sont ambigus et peuvent ĂȘtre source de confusion dans d'autres cas.
Quiconque travaille avec PHP depuis longtemps est susceptible de voir une application avec un fichier constant (ou mĂȘme plusieurs fichiers) qui contient des dizaines, voire des centaines de constantes nommĂ©es, nĂ©cessitant des noms longs et descriptifs pour Ă©viter les conflits de noms.
<?php define('COLOR_RED', '#f44141'); define('COLOR_BLUE', '#4286f4'); define('COLOR_GREEN', '#1ae01e'); define('COLOR_PURPLE', '#f309f7'); define('COLOR_ORANGE', '#ef7700');
Les constantes nommĂ©es, en plus des types de donnĂ©es prĂ©cĂ©demment pris en charge, peuvent ĂȘtre des tableaux indexĂ©s ou associatifs. Cela vous aidera Ă regrouper plus prĂ©cisĂ©ment de nombreuses constantes nommĂ©es que vous pourriez avoir dans votre application.
<?php
Conclusion
Il y a d'autres nouvelles fonctionnalités formidables que je n'ai pas mentionnées, telles que les classes anonymes et l'opérateur de vaisseau spatial. Consultez donc la documentation PHP.net pour plus d'informations. Merci d'avoir pris le temps de lire tout cela et veuillez laisser vos questions ou commentaires ci-dessous.
merci berez pour les commentaires.