Aperçu de mes fonctionnalités PHP7 préférées


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'; } // Versus $key = $_GET['key'] ?? $_POST['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); // hello 

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 //     define('COLORS', [ 'red' => '#f44141', 'blue' => '#4286f4', 'green' => '#1ae01e', 'purple' => '#f309f7', 'orange' => '#ef7700', ]); echo(COLORS['red']); // #f44141 //    define('COLORS', [ 'red', 'blue', 'green', 'purple', 'orange', ]); echo(COLORS[0]); // 'red' 

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.

Source: https://habr.com/ru/post/fr419625/


All Articles