PHP7の新機能の紹介

WBOY
リリース: 2016-06-23 13:24:11
オリジナル
935 人が閲覧しました

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

新機能プレビュー

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

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

    16 進文字列変換が廃止されました
  • //PHP5"0x10" == "16"//PHP7"0x10" != "16"
    ログイン後にコピー

  • HTTP_RAW_ POST_DATAは削除されました (代わりに php://input を使用できます)
  • 静的関数は互換性のない $this を渡すことをサポートしなくなりました
  • $o = & new className{}、この書き込みメソッドはサポートされなくなりました
  • php.ini ファイルはコメントとして # を削除しました。コメントするには ; を使用してください
  • 一部の動作が変更されました
  • 同じ名前の関数定義パラメータはサポートされなくなりました
  • 同じ名前は推奨されなくなりました (現在は削除されていませんが、将来削除される予定です)
  • String、int、float およびその他のキーワードをクラス名として使用することはできません
  • func_get_args() は現在の値を取得します変数
  • function test ($num) {    $num++;    var_dump(func_get_args()[0]);};test(1)//PHP5int(1)//PHP7int(2)
    ログイン後にコピー

  • ここでは、私たち PHPer が紹介する主要、中核、重要な機能をいくつか紹介します

    PHP NG

    新しい PHP エンジンは多くの箇所で最適化されており、まさにこのおかげで php7 のパフォーマンスは向上しました。 php5と比べて約2倍になりました!

      ZVAL構造の再構成

    左側はPHP5のzval(24バイト)、右側はPHP7のzval(16バイト)です;

    php7 の zval は php5 よりも優れています。より複雑ですが、24 バイトから 16 バイトに削減できます。なぜでしょうか。

    C 言語では、struct の各メンバー変数は独立したメモリ空間を占有しますが、union のメンバー変数はメモリ空間を共有します (php7 は、struct を置き換えるために Union を広範囲に使用します)。したがって、メンバー変数がはるかに増えているように見えますが、パブリック変数の多くが占める実際のメモリ領域は減少しています。

      新しい Zend 配列を使用して、以前の HashTale 構造を置き換えます
    私たちの PHP プログラムで最も使用され、最も有用で、最も便利で、最も柔軟なものは配列であり、php5 の最下層が実装されていますPHP7 は新しい Zend Array タイプを使用しており、パフォーマンスとアクセス速度が大幅に向上しています。

    低オーバーヘッドで非常によく使用されるいくつかの関数は、エンジンによってサポートされるオペコードに直接変換されます
    • call_user_function(_array) => ZEND_INIT_USER_CALL
    • is_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。。。

    関連ラベル:
    ソース:php.cn
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート