これまでのところ、PHP は php7 の RC5 バージョンを正式にリリースしており、最初の正式バージョンは 11 月頃にリリースされる予定です。現在、php7 の主要な機能は確実に完成しており、これ以上の変更はありません。後続のいくつかのバージョンの反復は、主にバグ修正、最適化などです。私たちが楽しみにしていた php7 の主な変更点について話しましょう。 。 。
ZEND エンジンが Zend Engine 3 (PHP NG とも呼ばれる) にアップグレード
一部の機能を削除
に加えて
//PHP5"0x10" == "16"//PHP7"0x10" != "16"
一部の動作が変更されました
function test ($num) { $num++; var_dump(func_get_args()[0]);};test(1)//PHP5int(1)//PHP7int(2)
PHP NG
左側はPHP5のzval(24バイト)、右側はPHP7のzval(16バイト)です;
php7 の zval は php5 よりも優れています。より複雑ですが、24 バイトから 16 バイトに削減できます。なぜでしょうか。
C 言語では、struct の各メンバー変数は独立したメモリ空間を占有しますが、union のメンバー変数はメモリ空間を共有します (php7 は、struct を置き換えるために Union を広範囲に使用します)。したがって、メンバー変数がはるかに増えているように見えますが、パブリック変数の多くが占める実際のメモリ領域は減少しています。
低オーバーヘッドで非常によく使用されるいくつかの関数は、エンジンによってサポートされるオペコードに直接変換されます
call_user_function(_array) => ZEND_INIT_USER_CALL
定義 => ZEND+DEFINED新しいメモリ割り当てと管理方法を使用してメモリの無駄を削減します
コアソートの最適化
//PHP5 - 快速排序(非稳定排序)array(1 => 0, 0 => 0)//PHP7 - 快速排序+选择排序(稳定排序)array(0 => 0, 1 => 0)
16 未満要素の選択ソートを使用する要素が 16 個を超える場合は、16 単位に分割し、それぞれ選択ソートを使用してから、すべてを結合してクイックソートを使用します。以前のソートと比較して、内部要素が非安定ソートから安定ソートに変更され、要素交換の数が減り、メモリ操作の数が減り、パフォーマンスが 40% 向上しました
抽象構文ツリー
64ビットINTサポート
2GBを超えるファイルのアップロードをサポート
すべてのプラットフォームで文字列が64ビットであることを保証[64ビット]
$$foo['bar']['baz']//PHP5($$foo)[‘bar’]['baz']//PHP7: 遵循从左到右的原则${$foo[‘bar’]['baz']}
//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。。。