欧美亚洲中文,在线国自产视频,欧洲一区在线观看视频,亚洲综合中文字幕在线观看

      1. <dfn id="rfwes"></dfn>
          <object id="rfwes"></object>
        1. 站長資訊網(wǎng)
          最全最豐富的資訊網(wǎng)站

          一起看看php7的重大新特性

          一起看看php7的重大新特性

          截止到目前為止,PHP官方已經(jīng)發(fā)布了php7的RC5版本,現(xiàn)在來說php7的重大特性肯定已經(jīng)是定型了,不會(huì)再有什么變動(dòng)了。后續(xù)一些版本的迭代主要也就是修修bug,優(yōu)化之類的。下面就來說話我們一直期待的php7會(huì)有那些主要的變化了。

          新特性預(yù)覽

          ZEND引擎升級(jí)到Zend Engine 3,也就是所謂的PHP NG 增加抽象語法樹,使編譯更加科學(xué) 64位的INT支持 統(tǒng)一的變量語法 原聲的TLS - 對(duì)擴(kuò)展開發(fā)有意義 一致性foreach循環(huán)的改進(jìn) 新增 <=>、**、?? 、u{xxxx}操作符 增加了返回類型的聲明 增加了標(biāo)量類型的聲明 核心錯(cuò)誤可以通過異常捕獲了 增加了上下文敏感的詞法分析

          相關(guān)學(xué)習(xí)推薦:PHP 編程從入門到精通

          移除的一些特性

          1.移除一些舊的擴(kuò)展,被移遷移到了PECL(例如:mysql)
          2.移除SAPIs的支持
          3.<?和<? language=“php”這樣的標(biāo)簽被移除了
          4.16進(jìn)制的字符串轉(zhuǎn)換被廢除了

          //PHP5 "0x10" == "16"  //PHP7 "0x10" != "16"

          5.HTTP_RAW_POST_DATA移除了(可以使用php://input替代)

          6.靜態(tài)函數(shù)里面不再支持通過一個(gè)不兼容的$this調(diào)用一個(gè)非靜態(tài)的函數(shù)了
          $o = & new className{},不再支持這樣的寫法
          7.php.ini文件移除了#作為注釋,統(tǒng)一用;去注釋

          一些行為的改變

          不在支持函數(shù)定義同名參數(shù)
          類型的同名構(gòu)造函數(shù)不推薦使用了(目前沒有移除,后續(xù)會(huì)移除)
          String、int、float等這些關(guān)鍵字不能被作為類名使用了
          func_get_args()獲取的是當(dāng)前變量的值

          function test ($num) {   $num++;   var_dump(func_get_args()[0]); };  test(1)  //PHP5 int(1)  //PHP7 int(2)

          下面就挑選了一些主要的、核心的、對(duì)我們PHPer來說比較重要的特性介紹一下

          PHP NG

          新的php引擎優(yōu)化了很多地方,也正式因?yàn)槿绱耍攀沟胮hp7相對(duì)于php5性能有了接近兩倍的提升!

          ZVAL結(jié)構(gòu)的重構(gòu)

          一起看看php7的重大新特性

          左邊是PHP5的zval(24字節(jié)),右邊是PHP7的zval(16字節(jié));

          可以看出來php7的zval要比php5還要復(fù)雜,但是卻能從24個(gè)字節(jié)下降到16個(gè)字節(jié),為什呢?

          在C語言中struct的每一個(gè)成員變量要各自占據(jù)一塊獨(dú)立的內(nèi)存空間,而union里的成員變量是共用一塊內(nèi)存空間(php7中大量使用union替換了struct)。因此,雖然成員變量看起來多了不少,但是實(shí)際占據(jù)的內(nèi)存空間有很多都是公用的卻下降了。

          使用新的Zend Array替換之前的HashTale結(jié)構(gòu)

          我們php程序中使用最多、最有用、最方便、最靈活的就是數(shù)組了,而php5它的底層就是HashTable實(shí)現(xiàn)的,php7使用了新的Zend Array類型,性能和訪問速度上都有了大幅度提升!
          一些非常常用,開銷不大的的函數(shù)直接變成了引擎支持的opcode

          call_user_function(_array) => ZEND_INIT_USER_CALL is_int/string/array/* => ZEND_TYPE_CHECK strlen => ZEND_STRLEN defined => ZEND+DEFINED

          使用了新的內(nèi)存分配,管理方式,減少了內(nèi)存的浪費(fèi)
          核心排序zend_sort的優(yōu)化

          //PHP5 - 快速排序(非穩(wěn)定排序) array(1 => 0, 0 => 0)  //PHP7 - 快速排序+選擇排序(穩(wěn)定排序) array(0 => 0, 1 => 0)

          小于16個(gè)元素的使用選擇排序,大于16個(gè)按照16個(gè)為單位去分割,分別使用選擇排序,然后再全部合起來使用快速排序。排序較之前相比,內(nèi)部元素由非穩(wěn)定排序變成穩(wěn)定排序,減少元素的交換次數(shù),減少對(duì)內(nèi)存的操作次數(shù),性能提升40%
          抽象語法樹

          一起看看php7的重大新特性

          假如現(xiàn)在我們有這樣的需求,要對(duì)php源文件就行語法檢測,實(shí)現(xiàn)編碼規(guī)范。php5之前的話,沒有AST,直接從parser就生成了opcodes!就需要借助一些外部的php語法解析器來實(shí)現(xiàn);而php7增加了AST,我們可以自己去實(shí)現(xiàn)這樣一個(gè)擴(kuò)展,利用擴(kuò)展提供的函數(shù)可以直接獲取文件對(duì)應(yīng)的的AST結(jié)構(gòu),而這樣的結(jié)構(gòu)正是我們可以識(shí)別的,所以就可以在這個(gè)基礎(chǔ)上去做一些優(yōu)化和判斷了。

          64位的INT支持

          支持存儲(chǔ)大于2GB的字符串
          支持上傳大小大于2GB的文件
          保證字符串在所有平臺(tái)上【64位】都是64bit
          統(tǒng)一的語法變量

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

          foreach循環(huán)的改進(jìn)

          //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:不再操作數(shù)據(jù)的內(nèi)部指針了 $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)

          新增的幾個(gè)操作符

          //<=> - 比較兩個(gè)數(shù)的大小【-1:前者小于后者,0:前者等于后者,1:前者大于后者】 echo 1 <=> 2;//-1 echo 1 <=> 1;//0 echo 1 <=> 0;//1  // ** - 【a的b次方】 echo 2 ** 3;//8  //?? - 三元運(yùn)算符的改進(jìn) //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

          標(biāo)量類型的聲明

          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…

          核心錯(cuò)誤可以通過異常捕獲了

          try {   non_exists_func(); } catch(EngineException $e) {   echo “Exception: {$e->getMessage();}n”; }  //這里用php7試了一下還是沒法捕獲,但是看鳥哥介紹說是可行的。。。 #Exception: Call to undefined function non_exists_func()

          上下問敏感的詞法分析

          //PHP5 class Collection {public function foreach($arr) {}} #Parse error: parse error, expecting `"identifier (T_STRING)”'...  //PHP7 class 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();

          差不多了,基本上就把自己對(duì)php7的初步了解說完了,其中肯定有很多不對(duì)的、低級(jí)的錯(cuò)誤,希望各位兄弟及時(shí)指正,我好改一下,做個(gè)筆記!嘿嘿!

          贊(0)
          分享到: 更多 (0)
          網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)