portaldacalheta.pt
  • Principal
  • Science Des Données Et Bases De Données
  • Conception Mobile
  • Design De Marque
  • Personnes Et Équipes Produit
Back-End

Introduction à PHP 7: Nouveautés et nouveautés



L'un des événements les plus excitants dans le monde PHP en 2015 a été la sortie de PHP 7. 10 ans après la sortie de la dernière version majeure, PHP 5. Avec un grand pas en avant, PHP 7 introduit une tonne de nouvelles fonctionnalités et mises à jour de performances .

Cependant, il supprime également les anciennes fonctionnalités obsolètes, ce qui introduit des lacunes de compatibilité, ce qui rend plus difficile la migration des applications plus anciennes vers la nouvelle version. Ce guide devrait servir de tour d'horizon rapide de ce à quoi vous attendre si vous prévoyez de déplacer vos applications existantes, ou d'en créer de nouvelles, en plus de PHP 7.



Mais attendez, où est passé PHP 6?

Si vous n'avez pas travaillé avec PHP récemment, vous vous demandez peut-être ce qui est arrivé à PHP 6, pourquoi le passage de PHP 5 à PHP 7? Bref, PHP 6 était un flop. La principale caractéristique de la version 6 était la prise en charge des caractères natifs Unicode Étant donné que PHP est principalement utilisé dans le développement Web et que le Web a besoin d'Unicode, il était donc logique de passer d'Unicode à PHP.



L'idée était d'apporter un support Unicode complet au noyau lui-même. Cela aurait apporté des capacités étendues au langage: de la capacité à utiliser emojis stupides, comme les noms de variables et de fonctions, aux puissantes fonctions de chaînes internationales. Par exemple, lorsqu'une autre langue utilise des lettres majuscules et minuscules différemment de l'anglais, ou lorsqu'un nom en caractères chinois doit être converti en anglais.



PHP 6 était ambitieux, mais nul. C

PHP 6 était ambitieux, mais nul. C'est ainsi que nous nous sommes retrouvés avec PHP 7, en sautant la version 6 dans le processus. Tweet

Malheureusement, ce plan ambitieux s'est avéré être un problème plus important que prévu. La plupart de la base de code a dû être portée pour prendre en charge Unicode pour les extensions majeures et majeures, ce qui était fastidieux et compliqué. Cela a ralenti le développement d'autres fonctionnalités du langage, frustrant de nombreux Développeurs PHP Dans le processus. Des obstacles supplémentaires ont été présentés, ce qui a réduit l'intérêt pour le développement de la prise en charge native d'Unicode, conduisant finalement à l'abandon du projet.



Puisque les ressources, telles que les livres et les articles, avaient été écrites pour PHP 6 et son support Unicode, la nouvelle version serait renommée PHP 7 pour éviter toute confusion.

Bref, assez souffrant du triste passé, voyons ce que PHP 7 apporte à la fête.



Bataille de performance, PHP 7 vs. PHP 5

Avec pratiquement toutes les mises à jour, des améliorations mineures des performances sont attendues. Cependant, cette fois, PHP apporte une amélioration significative par rapport aux versions précédentes qui font de la performance pure l'une des fonctionnalités les plus attrayantes de PHP 7. Cela fait partie du projet «PHPNG», qui aborde les composants internes du moteur lui-même. Zend.

En refactorisant les structures de données internes et en ajoutant une étape intermédiaire pour coder la compilation sous la forme d'un arbre de syntaxe abstraite (AST), le résultat est des performances supérieures et une allocation de mémoire plus efficace. Les chiffres eux-mêmes semblent très prometteurs; Les Benchmarks realizados en aplicaciones del mundo real muestran que PHP 7 es dos veces más rápido que PHP 5.6 en promedio y que resulta en un 50% menos de consumo de memoria durante las solicitudes, convirtiendo a PHP 7 en un fuerte rival para el compilador HHVM JIT de Facebook. Jetez un œil à cette infographie Zend illustrant les performances de certains Cadres CMS y .



PHP 7 semble et semble familier, mais est réglé pour les performances. Le moteur Zend raffiné et les gains de performances qui en résultent font une grande différence.

PHP 7 semble et semble familier, mais est réglé pour les performances. Le moteur Zend raffiné et les gains de performances qui en résultent font une grande différence. Tweet

La diminution de la consommation de mémoire permet également aux petites machines de mieux gérer les demandes et de créer des microservices autour de PHP. Les changements internes, en particulier l'implémentation AST, ouvrent également des possibilités d'optimisations futures qui pourraient pousser encore plus loin les performances. Une nouvelle implémentation interne d'un compilateur JIT est envisagée pour les versions futures.



Sucre syntaxique PHP 7

PHP 7 est livré avec de nouvelles fonctionnalités de syntaxe. Bien qu'ils n'étendent pas les capacités du langage lui-même, ils fournissent un moyen meilleur ou plus simple de rendre votre code plus agréable à écrire et plus confortable à l'œil nu.

Déclarations d'importation de groupe

Maintenant, nous pouvons regrouper les déclarations d'importation pour les classes provenant du même espace de noms sur la ligne 'usage'. Cela devrait aider à aligner les déclarations de manière significative ou simplement enregistrer quelques octets dans vos fichiers.



use FrameworkModuleFoo; use FrameworkModuleBar; use FrameworkModuleBaz;

Avec PHP 7, nous pouvons utiliser:

use FrameworkModule{Foo, Bar, Baz};

Ou si nous préférons un style multi-linéaire:

use FrameworkModule{ Foo, Bar, Baz };

Opérateur coalescent nul

Cela résout un problème courant en programmation PHP, où l'on veut attribuer une valeur à une variable d'une autre variable, si cette dernière est vraiment définie; sinon, donnez-lui une valeur différente de celle-ci. Il est couramment utilisé lorsque vous travaillez avec une entrée fournie par l'utilisateur.

Pré-PHP 7:

if (isset($foo)) { $bar = $foo; } else { $bar = 'default'; // we would give $bar the value 'default' if $foo is NULL }

Après PHP 7:

$bar = $foo ?? 'default';

Cela peut également être enchaîné avec un certain nombre de variables:

$bar = $foo ?? $baz ?? 'default';

Opérateur de vaisseau spatial

L'opérateur de vaisseau spatial permet une comparaison à trois voies entre deux valeurs, indiquant non seulement si elles sont égales, mais aussi laquelle est la plus grande, sur l'inégalité en renvoyant 1,0 ou -1.

Ici, nous pouvons prendre différentes actions en fonction de la différence entre les valeurs:

switch ($bar $foo) { case 0: echo '$bar and $foo are equal'; case -1: echo '$foo is bigger'; case 1: echo '$bar is bigger'; }

Les valeurs comparées peuvent être des entiers, des flottants, des chaînes ou même des tableaux. Consultez la documentation pour avoir une idée de la façon dont les différentes valeurs se comparent les unes aux autres.

Nouvelles fonctions en PHP 7

Mais bien sûr, PHP 7 apporte également de nouvelles fonctionnalités intéressantes.

Types de paramètres scalaires et suggestions de types de retour

PHP 7 étend les déclarations des types de paramètres précédents dans les méthodes (classes, interfaces et tableaux) en ajoutant les quatre types scalaires; Entiers (int), Flotteurs ( float), Booléens (bool) et Cordes ( string) comme types de paramètres possibles.

De plus, nous pouvons éventuellement spécifier le type de méthodes et de fonctions qu'elles renvoient. Les types pris en charge sont * bool *, * int *, * float *, * string *, * array *, * callable *, * Class * ou * Interface * name, * self * et * parent * (pour les méthodes de classe)

Clase Calculadora { // Declaramos que los parámetros proporcionados son del tipo entero Función Pública addTwoInts (int $ x, int $ y): int { Retorno $ x + $ y; // También decimos explícitamente que este método devolverá un entero } }

Les déclarations de type permettent la construction d'applications plus robustes et évitent de transmettre et de renvoyer des valeurs erronées des fonctions. Les autres avantages comprennent les analyseurs de code statiques et les IDE, qui offrent une meilleure vue de la base de code si le DocBlocks.

Puisque PHP est un langage de typage faible, certaines valeurs du paramètre et des types de retour seront générées en fonction du contexte. Si nous passons la valeur '3' dans une fonction qui a un paramètre déclaré de type int, l'interpréteur l'acceptera comme un entier et ne lèvera pas d'erreur. Si vous ne le souhaitez pas, vous pouvez activer modo estricto ajouter une directive de declarar.

Declarar (tipos_estrictos = 1);

Ceci est défini sur une base par fichier, car une option globale diviserait les référentiels de code en ceux qui sont construits avec une rigueur globale dans et ceux qui ne le sont pas, ce qui entraîne un comportement inattendu lorsque nous combinons le code des deux.

Exceptions du moteur

Avec l'ajout d'exceptions moteur, des erreurs fatales qui auraient pu entraîner l'arrêt du Scénario ils peuvent être facilement capturés et manipulés.

Des erreurs telles que l'appel d'une méthode inexistante ne mettront pas fin au script, mais lèveront une exception qui peut être gérée par un bloc de test de capture, ce qui améliore la gestion des erreurs pour vos applications. Ceci est important pour certains types d'applications, de serveurs et Démons car des erreurs fatales nécessiteraient un redémarrage. Les tests dans PHPUnit devraient également être plus utiles, car les erreurs fatales effacent toute la suite de tests. Les exceptions, plutôt que les erreurs, seraient gérées par le cas de test.

L

PHP 7 semble et semble familier, mais est réglé pour les performances. Le moteur Zend raffiné et les gains de performances qui en résultent font une grande différence. Tweet

PHP 7 ajoute un certain nombre de nouvelles classes d'exceptions en fonction du type d'erreurs qui peuvent être rencontrées. Afin de maintenir la compatibilité entre les versions, une nouvelle interface Throwable qui peut être implémenté à partir d'exceptions de moteur et d'utilisateur. Cela était nécessaire pour éviter les exceptions de moteur pour étendre la classe d'exception de base, ce qui entraînait d'anciennes exceptions de capture de code qui n'existaient pas auparavant.

Avant PHP 7, cela aurait terminé le script avec une erreur fatale:

try { thisFunctionDoesNotEvenExist(); } catch (EngineException $e) { // Clean things up and log error echo $e->getMessage(); }

Classes anonymes

Les classes anonymes sont des cousins ​​de fonctions anonymes que vous pouvez utiliser dans une instance simple à court terme. Les classes anonymes peuvent être facilement créées et utilisées comme un objet normal. Voici un exemple tiré de la documentation.

Pré-PHP 7

php class MyLogger { public function log($msg) { print_r($msg . ' '); } } $pusher->setLogger( new MyLogger() );

Avec classe anonyme:

php $pusher->setLogger(new class { public function log($msg) { print_r($msg . ' '); } });

Les classes anonymes sont utiles dans les tests unitaires, en particulier pour tester des objets et des services. Cela nous aide à éviter la réplication de bibliothèques et de frameworks lourds en créant un objet simple qui fournit l'interface que nous voulons imiter.

Fonctions CSPRNG

Deux nouvelles fonctions ont été ajoutées pour générer des entiers et des chaînes cryptographiquement sécurisés.

random_bytes(int $len);

Renvoie une chaîne aléatoire de longueur $len.

php random_int(int $min, int $max);

Renvoie un nombre compris entre $min et $max.

Syntaxe d'échappement Unicode de point de code

Contrairement à de nombreux autres langages, avant PHP 7, PHP n'avait pas de moyen d'échapper au code Unicode dans les chaînes littérales. Cette fonctionnalité ajoute la séquence d'échappement ` u 'pour produire ces caractères à l'aide de votre codecode UTF-8. C'est mieux que d'insérer directement les caractères, ce qui permet une meilleure gestion des caractères invisibles, ainsi que des caractères qui ont la même représentation graphique, mais qui diffèrent dans la signification.

echo 'u{1F602}'; // outputs ‚

Notez que cela rompt le code existant avec la séquence ` u 'car cela change le comportement.

Les générateurs sont mis à niveau

Les générateurs en PHP bénéficient également de fonctionnalités supplémentaires intéressantes. Les générateurs ont maintenant une instruction return qui peut être utilisée pour lui permettre de produire une valeur finale après l'itération. Cela peut être utilisé pour vérifier que le générateur a fonctionné sans erreur et permet au code qui a appelé le générateur de gérer correctement divers scénarios.

De plus, les générateurs peuvent renvoyer et rendre des expressions à partir d'autres générateurs. Cela leur permet de décomposer les opérations complexes en unités plus simples et plus modulaires.

function genA() { yield 2; yield 3; yield 4; } function genB() { yield 1; yield from genA(); // 'genA' Se llama aquí e itera sobre yield 5; return 'success'; // Este es un resultado final que podemos comprobar más tarde } foreach (genB() as $val) { echo ' $val'; // Esto emitirá los valores 1 a 5 para} $genB()->getReturn(); // Esto debería devolver el 'éxito' cuando no hay errores.

Attentes

Les attentes sont une amélioration de la afirmar () tout en maintenant la compatibilité descendante. Ils permettent des assertions à coût nul dans le code de production et offrent la possibilité de lever des exceptions personnalisées lorsque l'assertion échoue, ce qui peut être utile pendant le développement.

Afirmar () devient une construction de langage en PHP 7. Les assertions doivent être utilisées à des fins de débogage uniquement dans les environnements de développement et de test. Pour configurer son comportement, nous avons deux nouvelles directives.

  • zend.afirmación - 1: générer et exécuter du code (mode développement) (valeur par défaut) - 0: générer du code mais en faire le tour à l'exécution - -1: ne pas générer de code ce qui le rend nul (Mode de production)
  • afirmación.excepción - 1: lancer lorsque l'assertion échoue, lancer l'objet fourni comme exception ou lancer un nouvel objet * ErrorAffirmation * si l'exception n'a pas été fournie - 0: utiliser ou générer un * Throwable * comme décrit ci-dessus, mais il ne génère qu'un avertissement basé sur cet objet au lieu de le lancer (compatible avec le comportement de PHP 5)

Préparation pour passer de PHP 5 à PHP 7

L'introduction d'une version majeure offre la possibilité de modifier / mettre à jour des fonctionnalités plus anciennes ou même de les supprimer si elles sont jugées trop anciennes ou obsolètes depuis un certain temps. De tels changements peuvent introduire des ruptures de compatibilité dans les anciennes applications.

Un autre problème qui découle de cette version est que les bibliothèques et infrastructures importantes dont vous dépendez n'ont peut-être pas été mises à jour pour prendre en charge la dernière version. L'équipe PHP a essayé d'apporter les nouvelles modifications le plus tard possible et de rendre la migration vers la nouvelle version aussi simple que possible. Les applications plus récentes et plus mises à jour devraient trouver plus facile de passer à la nouvelle version, tandis que les applications plus anciennes devront peut-être décider si les avantages l'emportent sur le coût, en choisissant éventuellement de ne pas mettre à niveau.

La plupart des pauses sont mineures et peuvent être facilement atténuées, tandis que d'autres peuvent exiger plus d'efforts et de temps. En gros, si vous aviez des avertissements périmés dans votre application avant d'installer PHP 7, vous obtiendrez probablement des erreurs qui casseront l'application jusqu'à ce qu'elle soit résolue. Vous avez été prévenu, non?

Anciens SAPI et extensions

Plus important encore, les SAPI anciens et obsolètes ont été supprimés en tant qu'extension mysql (mais vous ne devriez pas l'utiliser en premier lieu, non?). Pour une liste complète des extensions et des faits saillants supprimés, vous pouvez consulter cette RFC ici Oui ici .

En outre, d'autres SAPI sont portés vers PHP 7.

Des charges de SAPI et d

Des charges de SAPI et d'anciennes extensions ont été supprimées de PHP 7. Nous prévoyons qu'elles ne seront pas perdues. Tweet

Syntaxe de variable uniforme

Cette mise à jour a apporté quelques changements en faveur de la cohérence des constructions à variable variable. Cela permet des expressions plus avancées avec des variables, mais introduit des changements de comportement dans certains autres cas, comme indiqué ci-dessous.

// old meaning // new meaning $$foo['bar']['baz'] ${$foo['bar']['baz']} ($$foo)['bar']['baz'] $foo->$bar['baz'] $foo->{$bar['baz']} ($foo->$bar)['baz'] $foo->$bar['baz']() $foo->{$bar['baz']}() ($foo->$bar)['baz']() Foo::$bar['baz']() Foo::{$bar['baz']}() (Foo::$bar)['baz']()

Cela briserait le comportement des applications qui accèdent à des valeurs comme celle-ci. D'autre part, vous pouvez faire des choses intéressantes comme celle-ci:.

// Nested () foo()(); // Calls the return of foo() $foo->bar()(); // IIFE syntax like JavaScript (function() { // Function body })(); // Nested :: $foo::$bar::$baz

Anciennes étiquettes de style supprimées

Les balises d'ouverture / fermeture `` , , ... `sont supprimés et ne sont plus valides. Les remplacer par des valides devrait être facile, mais que faites-vous avec eux de toute façon bizarre?

Noms non valides pour les classes, les interfaces et les traits

En raison des ajouts, tels que les classes de type de retour et de paramètre, les interfaces et les traits ne peuvent plus avoir les noms suivants:

- bool - int - float - string - null - true - false

Ceux-ci provoquent des ruptures dans les applications existantes et les bibliothèques qui les utilisent, mais devraient être faciles à corriger. En outre, bien qu'ils ne provoquent aucune erreur et soient valides, les éléments suivants ne doivent pas être utilisés car ils sont réservés pour une utilisation future:

-Ressource

objet - mixte - numérique

S'abstenir de les utiliser devrait vous éviter d'avoir à les changer à l'avenir. Pour une liste complète des changements qui briseraient la compatibilité, consultez ceci document .

Vous pouvez aussi utiliser php7cc , qui vérifie votre code et peut détecter les problèmes potentiels qui pourraient survenir si vous passez à PHP 7. Mais bien sûr, il n'y a pas de meilleur moyen que d'installer PHP 7 et de le vérifier par vous-même. ## Problèmes potentiels de compatibilité PHP ### Compatibilité de l'infrastructure PHP 7

meilleures pratiques de développement d'applications mobiles

De nombreux services d'hébergement ont commencé à ajouter le support de PHP 7. C'est une bonne nouvelle pour les fournisseurs d'hébergement mutualisé, car les gains de performances leur permettront d'augmenter le nombre de sites Web clients sur leur matériel, réduisant ainsi vos dépenses d'exploitation et augmentant vos marges. Quant aux clients eux-mêmes, ils ne doivent pas s'attendre à trop de coup de pouce dans ces conditions, mais pour être honnête, l'hébergement mutualisé n'est de toute façon pas une option orientée performance.

D'un autre côté, les services offerts par des serveurs privés virtuels ou des serveurs dédiés profiteront pleinement de cette baisse de performances. Quelques services de PaaS comme Heroku pris en charge PHP 7 depuis le début, mais d'autres services, comme AWS Beanstalk Oui OpenShift de Oracle , sont à la traîne. Consultez le site Web de votre fournisseur PaaS pour voir si PHP 7 est déjà pris en charge, ou si le support est prévu dans un proche avenir. Bien entendu, les fournisseurs IaaS vous permettent de prendre le contrôle du matériel et d'installer PHP 7 (ou de compiler si cela vous convient le mieux). Les packages PHP 7 sont désormais disponibles pour tous les principaux environnements IaaS.

Compatibilité logicielle PHP 7

En plus de la compatibilité de l'infrastructure, vous devez également être conscient des problèmes potentiels de compatibilité logicielle. Les systèmes de gestion de contenu populaires tels que WordPress, Joomla et Drupal ont ajouté la prise en charge de PHP 7 avec leurs dernières versions. Cadres importants comme Symfony et Laravel bénéficient également d'un soutien complet. Cependant, il est temps de mettre en garde. Ce support ne s'étend pas au code tiers sous la forme de plugins, plugins, packages, ou tout ce que ru CMS ou framework les appelle. Ils peuvent souffrir de problèmes de compatibilité et il est de votre responsabilité de vous assurer que tout est prêt pour PHP 7.

Pour les référentiels actifs et maintenus, cela ne devrait pas être un problème. Cependant, d'anciens référentiels sans maintenance et sans prise en charge de PHP 7 pourraient rendre toute votre application inutilisable.

L'avenir de PHP

La version PHP 7 a supprimé le code ancien et obsolète et a ouvert la voie à de nouvelles fonctionnalités et à des mises à jour de performances à l'avenir. De plus, PHP devrait bientôt bénéficier d'optimisations de performances supplémentaires. Malgré quelques lacunes de compatibilité descendante, la plupart des problèmes sont faciles à résoudre. Les bibliothèques et les frameworks migrent maintenant leur code vers PHP 7, rendant ainsi les dernières versions disponibles. Je veux vous encourager à essayer de voir les résultats par vous-même. Peut-être que votre application est déjà prise en charge et en attente d'utiliser et de bénéficier de PHP 7.

En relation: La liste des 10 erreurs les plus courantes commises par les développeurs PHP>

Évolution de la gestion de projet: startups vs entreprises

Personnes Et Équipes

Évolution de la gestion de projet: startups vs entreprises
L'Open Source sera-t-il également ouvert aux femmes?

L'Open Source sera-t-il également ouvert aux femmes?

Mode De Vie

Articles Populaires
Explorer la fonctionnalité Get & Transform d'Excel
Explorer la fonctionnalité Get & Transform d'Excel
Comment aborder les wrappers pour les propriétés Swift
Comment aborder les wrappers pour les propriétés Swift
ApeeScape s'associe à Guidant Global pour offrir un accès à la demande au réseau Elite de pigistes
ApeeScape s'associe à Guidant Global pour offrir un accès à la demande au réseau Elite de pigistes
Tutoriel Apache Spark Streaming: Identifier les hashtags Twitter tendances
Tutoriel Apache Spark Streaming: Identifier les hashtags Twitter tendances
Conception accessible vs conception inclusive (avec infographie)
Conception accessible vs conception inclusive (avec infographie)
 
L'intégration continue d'iOS avec le serveur Xcode expliquée
L'intégration continue d'iOS avec le serveur Xcode expliquée
Meilleurs éditeurs de programmation? Une bataille sans fin sans vainqueur clair
Meilleurs éditeurs de programmation? Une bataille sans fin sans vainqueur clair
Comment GWT déverrouille la réalité augmentée dans votre navigateur
Comment GWT déverrouille la réalité augmentée dans votre navigateur
Webpack ou Browserify & Gulp: quel est le meilleur?
Webpack ou Browserify & Gulp: quel est le meilleur?
Business Analyst - Stratégie & Analytics
Business Analyst - Stratégie & Analytics
Articles Populaires
  • comment créer un plan comptable
  • cas de test unitaire en java
  • les 5 principes de conception
  • principes de base de la psychologie de la gestalt
  • expliquer en quoi le design est important pour le contenu.
  • comment rédiger une requête média
Catégories
  • Science Des Données Et Bases De Données
  • Conception Mobile
  • Design De Marque
  • Personnes Et Équipes Produit
  • © 2022 | Tous Les Droits Sont Réservés

    portaldacalheta.pt