站長資訊網
        最全最豐富的資訊網站

        匯總php7所有版本新特征【推薦】

        PHP7.1新特性

        1. 可為空(Nullable)類型

        參數以及返回值的類型現在可以通過在類型前加上一個問號使之允許為空。當啟用這個特性時,傳入的參數或者函數返回的結果要么是給定的類型,要么是null

        #php5 function($a = null){   if($a===null) {     return null;   }   return $a; }  #php7+ function fun() :?string {   return null; }  function fun1(?$a) {   var_dump($a); } fun1(null);//null fun1('1');//1

        2. void 類型

        返回值聲明為 void 類型的方法要么干脆省去 return 語句。對于 void來說,NULL 不是一個合法的返回值。

        function fun() :void {   echo "hello world"; }

        3. 類常量可見性

        class Something {     const PUBLIC_CONST_A = 1;     public const PUBLIC_CONST_B = 2;     protected const PROTECTED_CONST = 3;     private const PRIVATE_CONST = 4; }

        4. iterable 偽類

        這可以被用在參數或者返回值類型中,它代表接受數組或者實現了Traversable接口的對象.

        function iterator(iterable $iter) {     foreach ($iter as $val) {         //     } }

        5. 多異常捕獲處理

        一個catch語句塊現在可以通過管道字符(_|_)來實現多個異常的捕獲。 這對于需要同時處理來自不同類的不同異常時很有用

        try {     // some code } catch (FirstException | SecondException $e) {     // handle first and second exceptions }

        6. list支持鍵名

        $data = [     ["id" => 1, "name" => 'Tom'],     ["id" => 2, "name" => 'Fred'], ];  // list() style list("id" => $id1, "name" => $name1) = $data[0]; var_dump($id1);//1

        7. 字符串支持負向

        $a= "hello"; $a[-2];//l

        8. 將callback 轉閉包

        Closure新增了一個靜態方法,用于將callable快速地 轉為一個Closure 對象。

        <?php class Test {     public function exposeFunction()     {         return Closure::fromCallable([$this, 'privateFunction']);     }      private function privateFunction($param)     {         var_dump($param);     } }  $privFunc = (new Test)->exposeFunction(); $privFunc('some value');

        9. http2 服務推送

        對http2服務器推送的支持現在已經被加入到 CURL 擴展

        原文鏈接:https://cloud.tencent.com/dev…

        PHP7.2新特性

        新的對象類型

        這種新的對象類型,object, 引進了可用于逆變(contravariant)參數輸入和協變(covariant)返回任何對象類型。

        <?php  function test(object $obj) : object {     return new SqlQueue(); }  test(new Stdclass());

        允許重寫抽象方法(Abstract method)

        當一個抽象類繼承于另外一個抽象類的時候,繼承后的抽象類可以重寫被繼承的抽象類的抽象方法。

        <?php  abstract class A {     abstract function test(string $s); }  abstract class B extends A {     abstract function test($s) : int; }

        使用Argon2算法生成密碼散列

        Argon2 已經被加入到密碼散列(password hashing) API (這些函數以 password_ 開頭), 以下是暴露出來的常量:

        • PASSWORD_ARGON2I
        • PASSWORD_ARGON2_DEFAULT_MEMORY_COST
        • PASSWORD_ARGON2_DEFAULT_TIME_COST
        • PASSWORD_ARGON2_DEFAULT_THERADS

        允許分組命名空間的尾部逗號

        命名空間可以在PHP 7中使用尾隨逗號進行分組引入。

        <?php  use FooBar{     Foo,     Bar,     Baz, };

        PHP7.3新特性

        1 發布時間

        06 Dec 2018

        官網PHP7.3新特性

        2 更靈活的HeredocNowdoc語法

        結束標記不再需要獨立一行或緊跟分號了。同時結束標記也可以使用縮進,使用縮進時doc內容的每行都會跳過相應的縮進。

        $data = ["元素", <<<STR     Doc Content     The new line     STR, 42,]; var_dump($data);  array(3) {   [0]=>   string(6) "元素"   [1]=>   string(25) "Doc Content The new line"   [2]=>   int(42) }

        以上語法中,Heredoc 作為一個數組元素出現,同時結束標記沒有獨立在一行,還有縮進。注意定義的字符串內容,兩行的縮進都被剝除了。

        3 數組析構支持引用賦值

        演示:

        $v = [10, 20]; [$a, &$b] = $v; $b += 10; var_dump($v, $a, $b);  array(2) {   [0]=>   int(10)   [1]=>   &int(30) } int(10) int(30)

        在為 $b 解析時,使用了引用傳遞,此時 $b 和 $v[1] 元素保持引用關系。

        4 list結構支持引用解析。

        演示:

        $v = [10, 20]; list($c, &$d) = $v; $d += 10; var_dump($v, $c, $d);  array(2) {   [0]=>   int(10)   [1]=>   &int(30) } int(10) int(30)

        5 instanceof 運算符支持字面量語法

        instanceof 的第一個運算數支持字面量,非對象型字面量檢測的結果為 false。

        var_dump("literal" instanceof stdClass); var_dump(42 instanceof stdClass); var_dump(new stdClass() instanceof stdClass);  bool(false) bool(false) bool(true)

        6 支持調用時參數的尾隨逗號

        調用函數時,參數列表后允許跟隨一個逗號。

        function methodName($p1, $p2) {     // some statmenet     var_dump($p1, $p2); } methodName(10, 20, );  int(10) int(20)

        調用函數時,第二個(最后一個)參數后,增加了一個逗號是允許的。但定義是不行。

        7 BC 數學函數

        bcscale()函數支持獲取當前BC函數所使用的 scale。

        bcscale(3); var_dump(bcscale());  int(3)

        8 LDAP 全支持

        LDAP:Lightweight Directory Access Protocol,輕量目錄訪問協議完全支持。

        9 多字節字符串函數更新

        • 全功能的 Case-Mapping 和 Case-Folding 支持
        • 大小寫不敏感字符串運算符使用 Case-Folding
        • 支持 Unicode 11
        • 長字符串支持
        • 命名捕獲支持

        10 FastCGI 進程管理

        增加了如下的選項來配置FPM的Logging:(暫未翻譯)

        • log_limit
        • log_buffering
        • decorate_workers_output

        11 Argon2id 算法支持

        –with-password-argon2[=dir] 配置參數后。提供了對Password_*()函數中的 Argon2i 和 Argon2id 散列的支持。使用 PASSWORD_ARGON2ID 常量進行指定算法。PHP需要 libargon2 庫版本要大于(等于)20161029。

        12 CompileError 異常替代了一些編譯錯誤

        新的 CompileError 異常被添加,ParseError繼承了這個異常。目前只會影響 Token_GET_All() 在 Token_parse 模式下可能引發的編譯錯誤。

        13 性能提升

        據說 PHP7.3 比 PHP 7.0 快 22%。未測試,有機會壓測一下。

        14 廢棄大小寫不敏感的常量

        大小寫不敏感的常量聲明現已被廢棄。將 TRUE 作為第三個參數傳遞給 define() 會導致一個廢棄警告。大小寫不敏感的使用(在讀取時使用一個與聲明時不同的大小寫方式)也已被廢棄。

        15 廢棄在字符串中搜索非字符串內容

        將一個非字符串內容傳遞給字符串搜索函數。 在將來所有待搜索的內容都將被視為字符串,而不是 ASCII 編碼值。如果需要依賴這個特性,你應該 要么顯示地進行類型轉換(轉為字符串),或者顯示地調用 chr()。 以下是受到影響的方法:

        16 新常量

        新常量

        原文鏈接:https://zhuanlan.zhihu.com/p/…

        PHP7.4新特性

        1、預加載

        預加載功能是指在服務啟動時,未運行任何應用程序代碼之前,將一組PHP文件加載到內存中,甚至可以對框架進行預加載,以提高性能。如果對預加載代碼進行修改,需要重啟服務。

        預加載相比opcache:opcache雖然解決了重復編譯問題,但opcache本身也有開銷。引用Dmitry Stogov大佬的話:

        Not only. The idea is to completely eliminate compilation and opcache overhead (copying from SHM to process memory and insertions into function/class tables on each request). Using this technique, we might write standard functions and classes in PHP (similar to systemlib.php in HHVM).
        預加載是完全消除編譯和opcache所帶來的開銷(從共享內存復制到進程內存,并在每個請求上插入到function/class表中),使用這種技術可以在PHP中編寫標準函數和類(類似于HHVM中的systemlib.php)

        想想看,其實預加載主要是提升像php-fpm這種架構形式的性能,并且會占用

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 久久精品国产亚洲网站| 国产精品成人精品久久久| 久久国产精品国产自线拍免费| 久久人人爽人人精品视频| 91精品美女在线| 人妻少妇精品中文字幕AV| 久久久久久无码国产精品中文字幕| 精品999在线| 91麻豆国产福利精品| 久久精品无码专区免费东京热 | 午夜精品久久影院蜜桃| 999国产精品视频| 国产日韩精品在线| 国产精品特级毛片一区二区三区| 无码精品一区二区三区在线| 午夜精品久久久内射近拍高清 | 夜夜精品无码一区二区三区| 欧美精品色精品一区二区三区| 国产精品夜色视频一级区| 99久久夜色精品国产网站| 五月花精品视频在线观看| AAA级久久久精品无码片| 久久亚洲精品中文字幕| 亚洲欧洲国产精品香蕉网| 亚洲视频在线精品| 亚洲精品国产高清嫩草影院| 四虎永久在线精品国产馆V视影院| 精品国产AⅤ一区二区三区4区| 国产精品偷伦视频免费观看了| 一区二区精品在线| 99久re热视频这里只有精品6| 老司机99精品99| 亚洲国产精品久久久久婷婷软件| 国产精品一国产精品| 2018国产精华国产精品| 经典国产乱子伦精品视频| 精品无码无人网站免费视频| 久久国产精品成人影院| 久久精品国产亚洲AV高清热| 久久久精品人妻一区二区三区四| 久久精品国产亚洲精品2020|