Maison >développement back-end >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}操作符 增加了返回类型的声明 增加了标量类型的声明 核心错误可以通过异常捕获了 增加了上下文敏感的词法分析
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 et HTTP_RAW_POST_DATA a été supprimé (vous pouvez utiliser php://input à la place)
6 Les fonctions statiques ne prennent plus en charge l'appel d'une fonction non statique via un $this
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"
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
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)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+DEFINEDUtilisez 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
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)
$$foo['bar']['baz'] //PHP5 ($$foo)[‘bar']['baz'] //PHP7: 遵循从左到右的原则 ${$foo[‘bar']['baz']}
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)
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['name'] ? $_GET['name'] : '';//Notice: Undefined index: … //php7 $_GET['name'] ?? '' -> ''; //\u{xxxx} - Unicode字符的解析 echo "\u{4f60}";//你 echo "\u{65b0}";//新
Déclaration de type scalaire
function getInt() : int { return “test”; }; getInt(); //PHP5 #PHP Parse error: parse error, expecting '{'... //PHP7 #Fatal error:Uncaught TypeError: Return value of getInt() must be of the type integer, string returned
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…
Analyse lexicale contextuelle
try { non_exists_func(); } catch(EngineException $e) { echo “Exception: {$e->getMessage();}\n”; } //这里用php7试了一下还是没法捕获,但是看鸟哥介绍说是可行的。。。 #Exception: Call to undefined function non_exists_func()
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!