PHP7の新機能の紹介

WBOY
WBOYオリジナル
2016-06-23 13:24:11943ブラウズ

これまでのところ、PHP は php7 の RC5 バージョンを正式にリリースしており、最初の正式バージョンは 11 月頃にリリースされる予定です。現在、php7 の主要な機能は確実に完成しており、これ以上の変更はありません。後続のいくつかのバージョンの反復は、主にバグ修正、最適化などです。私たちが楽しみにしていた php7 の主な変更点について話しましょう。 。 。

新機能プレビュー

  • ZEND エンジンが Zend Engine 3 (PHP NG とも呼ばれる) にアップグレード

  • コンパイルをより科学的にするために抽象構文ツリーを追加
  • 64 ビット INT サポート
  • 統合変数構文
  • オリジナルのTLS - 拡張開発に意味あり
  • 一貫性のあるforeachループの改善
  • 新しい96b4fef55684b9312718d5de63fb7121、**、??、u{xxxx}演算子
  • 戻り値の型を追加宣言
  • スカラー型宣言を追加
  • コアエラーは例外を通じて捕捉可能
  • 状況依存字句解析を追加
  • 一部の機能を削除
  • いくつかの古い拡張機能を削除し、PECLに移行のために例: mysql)
  • SAPI のサポートを削除
  • 0dd071a80ac1f740ae3d037a48d7914e ZEND_INIT_USER_CALLis_int/string/array/* => ストレン = > ZEND_STRLEN
    定義 => ZEND+DEFINED




    新しいメモリ割り当てと管理方法を使用してメモリの無駄を削減します
    • コアソートの最適化

      //PHP5 - 快速排序(非稳定排序)array(1 => 0, 0 => 0)//PHP7 - 快速排序+选择排序(稳定排序)array(0 => 0, 1 => 0)
    • 16 未満要素の選択ソートを使用する要素が 16 個を超える場合は、16 単位に分割し、それぞれ選択ソートを使用してから、すべてを結合してクイックソートを使用します。以前のソートと比較して、内部要素が非安定ソートから安定ソートに変更され、要素交換の数が減り、メモリ操作の数が減り、パフォーマンスが 40% 向上しました
    抽象構文ツリー

    これがあれば 要件は、PHP ソース ファイルに対して構文検出を実行し、コーディング標準を実装することです。 php5 より前には、AST は存在せず、オペコードはパーサーから直接生成されていました。これを実現するには、いくつかの外部 php 構文パーサーを使用する必要があります。php7 には AST が追加されており、そのような拡張機能を自分で実装でき、拡張機能によって提供される関数を使用して、ファイルに対応する AST 構造を直接取得できます。識別できるので、これに基づいて最適化と判断を行うことができます。

    64ビットINTサポート

    2GBを超える文字列の保存をサポート

    • 2GBを超えるファイルのアップロードをサポート

    • すべてのプラットフォームで文字列が64ビットであることを保証[64ビット]

    统一的语法变量

    $$foo['bar']['baz']//PHP5($$foo)[‘bar’]['baz']//PHP7: 遵循从左到右的原则${$foo[‘bar’]['baz']}

    foreach循环的改进

    //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)

    新增的几个操作符

    //<=> - 比较两个数的大小【-1:前者小于后者,0:前者等于后者,1:前者大于后者】echo 1 <=> 2;//-1echo 1 <=> 1;//0echo 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}";//新

    返回类型的声明

    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 

    标量类型的声明

    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…

    核心错误可以通过异常捕获了

    try {    non_exists_func();} catch(EngineException $e) {echo “Exception: {$e->getMessage();}\n”;}//这里用php7试了一下还是没法捕获,但是看鸟哥介绍说是可行的。。。#Exception: Call to undefined function non_exists_func()

    上下问敏感的词法分析

    //PHP5class Collection {public function foreach($arr) {}}#Parse error:  parse error, expecting `"identifier (T_STRING)”’...//PHP7class Collection {    public function foreach($arr) {}    public function in($arr){}    public function where($condition){}    public function order($condition){}}$collection = new Collection();$collection->where()->in()->foreach()->order();

    差不多了,基本上就把自己对php7的初步了解说完了,其中肯定有很多不对的、低级的错误,希望各位兄弟及时指正,我好改一下,做个笔记!嘿嘿!

    其中的内容和截图大部分都是来自鸟哥演讲的ppt。。。

    声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。