Maison développement back-end PHP7 Jetons un coup d'œil aux principales nouveautés de php7

Jetons un coup d'œil aux principales nouveautés de php7

Jun 28, 2020 pm 04:26 PM
php7 新特性


Jetons un coup d'œil aux principales nouveautés de php7

À partir de maintenant, PHP a officiellement publié la version RC5 de php7. Les principales fonctionnalités de php7 sont désormais définitivement finalisées. il n'y aura plus de changements. Les itérations de certaines versions ultérieures sont principalement des corrections de bugs, des optimisations, etc. Parlons des changements majeurs de PHP7 que nous attendions avec impatience.

Aperçu de la nouvelle fonctionnalité

ZEND引擎升级到Zend Engine 3,也就是所谓的PHP NG
增加抽象语法树,使编译更加科学
64位的INT支持
统一的变量语法
原声的TLS - 对扩展开发有意义
一致性foreach循环的改进
新增 <=>、**、?? 、\u{xxxx}操作符
增加了返回类型的声明
增加了标量类型的声明
核心错误可以通过异常捕获了
增加了上下文敏感的词法分析
Copier après la connexion

Recommandations d'apprentissage associées : PHP Programmation du débutant au compétent

Certaines fonctionnalités supprimées

1 Suppression de certaines anciennes extensions et migration vers PECL (telles que : mysql) <. 🎜> 2. Suppression de la prise en charge des SAPI
3. Les balises comme
6 Les fonctions statiques ne prennent plus en charge l'appel d'une fonction non statique via un $this

$o = & new className{}. n'est plus pris en charge.

Le fichier 7.php.ini a supprimé # comme commentaire et utilise ; pour commenter



Quelques changements de comportement

Constructeurs avec le même nom dans les paramètres de définition de fonction du type ne sont plus pris en charge (pas actuellement supprimés, mais le seront à l'avenir)String, int , float et autres mots-clés ne peuvent pas être utilisés comme noms de classe

func_get_args() obtient la valeur de la variable actuelle

//PHP5
"0x10" == "16"

//PHP7
"0x10" != "16"
Copier après la connexion

Ci-dessous, nous en avons sélectionné quelques-unes principales et principales qui sont plus pertinentes pour notre PHPer. Laissez-moi vous présenter les fonctionnalités importantes

PHP NG

Le nouveau moteur php a optimisé de nombreux endroits, et c'est officiellement à cause de cela que php7 a de meilleures performances que php5. Près de deux fois l'amélioration ! Reconstruction de la structure ZVAL


A gauche le zval de PHP5 (24 octets), et à droite le zval de PHP7 (16 octets) ;

On voit que le zval de php7 est plus compliqué que celui de php5, mais il peut être réduit de 24 octets à 16 octets. Pourquoi ?

En langage C, chaque variable membre de struct occupe un espace mémoire indépendant, tandis que les variables membres de union partagent un espace mémoire (l'union est largement utilisée pour remplacer struct en php7). Par conséquent, même s’il semble y avoir beaucoup plus de variables membres, l’espace mémoire réellement occupé, dont beaucoup sont publiques, a diminué.

Utilisez le nouveau Zend Array pour remplacer la précédente structure HashTale

Le plus utilisé, le plus utile, le plus pratique et le plus flexible de notre php programmes C'est un tableau, et la couche inférieure de php5 est implémentée par HashTable. php7 utilise le nouveau type Zend Array, et les performances et la vitesse d'accès ont été grandement améliorées ! Certaines fonctions très couramment utilisées et peu coûteuses deviennent directement des opcodes pris en charge par le moteur

function test ($num) {
  $num++;
  var_dump(func_get_args()[0]);
};

test(1)

//PHP5
int(1)

//PHP7
int(2)
Copier après la connexion

Utilise de nouvelles méthodes d'allocation et de gestion de mémoire pour réduire le gaspillage de mémoire

Tri des noyaux zend_sort Optimiser

call_user_function(_array) => ZEND_INIT_USER_CALL
is_int/string/array/* => ZEND_TYPE_CHECK
strlen => ZEND_STRLEN
defined => ZEND+DEFINED
Copier après la connexion

Utilisez le tri par sélection pour les éléments inférieurs à 16, divisez-les en unités de 16 pour les éléments supérieurs à 16, utilisez le tri par sélection séparément, puis combinez-les tous et utilisez le tri rapide. Par rapport au tri précédent, les éléments internes sont passés d'un tri non stable à un tri stable, réduisant le nombre d'échanges d'éléments, réduisant le nombre d'opérations de mémoire et améliorant les performances de 40 %

Arbre de syntaxe abstraite


Si nous avons un tel besoin maintenant, nous devons effectuer une détection de syntaxe sur le fichier source PHP et implémenter des normes de codage. Avant php5, il n'y avait pas d'AST, et les opcodes étaient générés directement depuis l'analyseur ! Nous devons utiliser des analyseurs de syntaxe php externes pour y parvenir ; et php7 ajoute AST, nous pouvons implémenter une telle extension nous-mêmes, et utiliser les fonctions fournies par l'extension pour obtenir directement la structure AST correspondant au fichier, et cette structure est ce qui nous Il peut être identifié, nous pouvons donc faire une certaine optimisation et un jugement sur cette base.

Prise en charge INT 64 bits

Prend en charge le stockage de chaînes de plus de 2 GoPrend en charge le téléchargement de fichiers de plus de 2 GoAssurez-vous que les chaînes sont en [64 -bit] sur toutes les plateformes sont 64 bits

Variables de syntaxe uniforme

//PHP5 - 快速排序(非稳定排序)
array(1 => 0, 0 => 0)

//PHP7 - 快速排序+选择排序(稳定排序)
array(0 => 0, 1 => 0)
Copier après la connexion


Améliorations de la boucle foreach

$$foo[&#39;bar&#39;][&#39;baz&#39;]

//PHP5
($$foo)[‘bar&#39;][&#39;baz&#39;]

//PHP7: 遵循从左到右的原则
${$foo[‘bar&#39;][&#39;baz&#39;]}
Copier après la connexion

Plusieurs nouveaux opérateurs

//PHP5
$a = array(1, 2, 3);foreach ($a as $v){var_dump(current($a));}
int(2)
int(2)
int(2)

$a = array(1, 2, 3);$b=&$a;foreach ($a as $v){var_dump(current($a));}
int(2)
int(3)
bool(false)

$a = array(1, 2, 3);$b=$a;foreach ($a as $v){var_dump(current($a));}
int(1)
int(1)
int(1)

//PHP7:不再操作数据的内部指针了
$a = array(1, 2, 3);foreach ($a as $v){var_dump(current($a))}
int(1)
int(1)
int(1)

$a = array(1, 2, 3);$b=&$a;foreach ($a as $v){var_dump(current($a))
int(1)
int(1)
int(1)

$a = array(1, 2, 3);$b=$a;foreach ($a as $v){var_dump(current($a))}
int(1)
int(1)
int(1)
Copier après la connexion
Déclaration de type de retour

//<=> - 比较两个数的大小【-1:前者小于后者,0:前者等于后者,1:前者大于后者】
echo 1 <=> 2;//-1
echo 1 <=> 1;//0
echo 1 <=> 0;//1

// ** - 【a的b次方】
echo 2 ** 3;//8

//?? - 三元运算符的改进
//php5
$_GET[&#39;name&#39;] ? $_GET[&#39;name&#39;] : &#39;&#39;;//Notice: Undefined index: …
//php7
$_GET[&#39;name&#39;] ?? &#39;&#39; -> &#39;&#39;;

//\u{xxxx} - Unicode字符的解析
echo "\u{4f60}";//你
echo "\u{65b0}";//新
Copier après la connexion

Déclaration de type scalaire

function getInt() : int {
  return “test”;
};

getInt();

//PHP5
#PHP Parse error: parse error, expecting &#39;{&#39;...

//PHP7
#Fatal error:Uncaught TypeError: Return value of getInt() must be of the type integer, string returned
Copier après la connexion

Les erreurs de base peuvent être détectées via des exceptions

function getInt(int $num) : int {
  return $num;
};

getInt(“test”);

//PHP5
#PHP Catchable fatal error: Argument 1 passed to getInt() must be an instance of int, string given…

//PHP7
#Fatal error: Uncaught TypeError: Argument 1 passed to getInt() must be of the type integer, string given…
Copier après la connexion

Analyse lexicale contextuelle

try {
  non_exists_func();
} catch(EngineException $e) {
  echo “Exception: {$e->getMessage();}\n”;
}

//这里用php7试了一下还是没法捕获,但是看鸟哥介绍说是可行的。。。
#Exception: Call to undefined function non_exists_func()
Copier après la connexion

C'est tout. J'ai pratiquement terminé ma compréhension préliminaire de php7. Il doit contenir de nombreuses erreurs erronées et de bas niveau. J'espère que vous pourrez les corriger à temps afin que je puisse les corriger et prendre des notes ! hé-hé !

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Que dois-je faire si le plug-in est installé dans php7.0 mais qu'il indique toujours qu'il n'est pas installé ? Que dois-je faire si le plug-in est installé dans php7.0 mais qu'il indique toujours qu'il n'est pas installé ? Apr 02, 2024 pm 07:39 PM

Pour résoudre le problème du plugin n'affichant pas installé dans PHP 7.0 : Vérifiez la configuration du plugin et activez le plugin. Redémarrez PHP pour appliquer les modifications de configuration. Vérifiez les autorisations du fichier du plugin pour vous assurer qu'elles sont correctes. Installez les dépendances manquantes pour garantir le bon fonctionnement du plugin. Si toutes les autres étapes échouent, reconstruisez PHP. D'autres causes possibles incluent des versions de plugin incompatibles, le chargement d'une mauvaise version ou des problèmes de configuration PHP.

Sortie de PHP 8.3 : aperçu des nouvelles fonctionnalités Sortie de PHP 8.3 : aperçu des nouvelles fonctionnalités Nov 27, 2023 pm 12:52 PM

Sortie de PHP8.3 : aperçu des nouvelles fonctionnalités À mesure que la technologie continue de se développer et que les besoins évoluent, les langages de programmation sont constamment mis à jour et améliorés. En tant que langage de script largement utilisé dans le développement Web, PHP s'est constamment amélioré pour offrir aux développeurs des outils plus puissants et plus efficaces. La version PHP 8.3 récemment publiée apporte de nombreuses nouvelles fonctionnalités et améliorations tant attendues. Jetons un coup d'œil à ces nouvelles fonctionnalités. Initialisation des propriétés non nulles Dans les versions précédentes de PHP, si une propriété de classe ne se voyait pas explicitement attribuer une valeur, sa valeur

Un guide pour découvrir les nouvelles fonctionnalités de PHP8 et acquérir une compréhension approfondie des dernières technologies Un guide pour découvrir les nouvelles fonctionnalités de PHP8 et acquérir une compréhension approfondie des dernières technologies Dec 23, 2023 pm 01:16 PM

Une analyse approfondie des nouvelles fonctionnalités de PHP8 pour vous aider à maîtriser les dernières technologies Au fil du temps, le langage de programmation PHP n'a cessé d'évoluer et de s'améliorer. La version PHP8 récemment publiée offre aux développeurs de nombreuses nouvelles fonctionnalités et améliorations intéressantes, apportant plus de commodité et d'efficacité à notre travail de développement. Dans cet article, nous analyserons en profondeur les nouvelles fonctionnalités de PHP8 et fournirons des exemples de code spécifiques pour vous aider à mieux maîtriser ces dernières technologies. Le compilateur JIT PHP8 introduit la compilation JIT (Just-In-Time)

Guide FAQ de l'environnement serveur PHP : résoudre rapidement les problèmes courants Guide FAQ de l'environnement serveur PHP : résoudre rapidement les problèmes courants Apr 09, 2024 pm 01:33 PM

Les solutions courantes pour les environnements de serveur PHP consistent à s'assurer que la version correcte de PHP est installée et que les fichiers pertinents ont été copiés dans le répertoire du module. Désactivez SELinux temporairement ou définitivement. Vérifiez et configurez PHP.ini pour vous assurer que les extensions nécessaires ont été ajoutées et configurées correctement. Démarrez ou redémarrez le service PHP-FPM. Vérifiez les paramètres DNS pour les problèmes de résolution.

Comment définir automatiquement les autorisations d'UnixSocket après le redémarrage du système? Comment définir automatiquement les autorisations d'UnixSocket après le redémarrage du système? Mar 31, 2025 pm 11:54 PM

Comment définir automatiquement les autorisations d'UnixSocket après le redémarrage du système. Chaque fois que le système redémarre, nous devons exécuter la commande suivante pour modifier les autorisations d'UnixSocket: sudo ...

Pourquoi une erreur se produit-elle lors de l'installation d'une extension à l'aide de PECL dans un environnement Docker? Comment le résoudre? Pourquoi une erreur se produit-elle lors de l'installation d'une extension à l'aide de PECL dans un environnement Docker? Comment le résoudre? Apr 01, 2025 pm 03:06 PM

Causes et solutions pour les erreurs Lors de l'utilisation de PECL pour installer des extensions dans un environnement Docker Lorsque nous utilisons un environnement Docker, nous rencontrons souvent des maux de tête ...

Quelles sont les nouvelles fonctionnalités de php8 Quelles sont les nouvelles fonctionnalités de php8 Sep 25, 2023 pm 01:34 PM

Les nouvelles fonctionnalités de php8 incluent le compilateur JIT, la déduction de type, les paramètres nommés, les types d'union, les propriétés, les améliorations de la gestion des erreurs, la prise en charge de la programmation asynchrone, les nouvelles fonctions de bibliothèque standard et les extensions de classe anonymes. Introduction détaillée : 1. Compilateur JIT, PHP8 introduit le compilateur JIT, ce qui constitue une amélioration importante des performances. Le compilateur JIT peut compiler et optimiser certains codes d'exécution à haute fréquence en temps réel, améliorant ainsi la vitesse d'exécution. 2. Dérivation de type, PHP8 ; introduit la fonction d'inférence de type, permettant aux développeurs de déduire automatiquement le type de variables lors de la déclaration des variables, etc.

Lequel est le meilleur, php8 ou php7 ? Lequel est le meilleur, php8 ou php7 ? Nov 16, 2023 pm 03:09 PM

Par rapport à PHP7, PHP8 présente certains avantages et améliorations en termes de performances, de nouvelles fonctionnalités et améliorations de la syntaxe, du système de types, de la gestion des erreurs et des extensions. Cependant, le choix de la version à utiliser dépend de vos besoins spécifiques et des circonstances du projet. Introduction détaillée : 1. Amélioration des performances, PHP8 introduit le compilateur Just-in-Time (JIT), qui peut améliorer la vitesse d'exécution du code ; 2. Nouvelles fonctionnalités et améliorations de la syntaxe, PHP8 prend en charge la déclaration des paramètres nommés et des paramètres facultatifs, création de fonctions L'appel est plus flexible ; des classes anonymes, des déclarations de propriétés de type, etc. sont introduites.

See all articles