<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 一、新增特性和改變 ## 1.?標量類型和返回類型聲明(Scalar?Type?Declarations?&?Scalar?Type?Declarations) PHP語言一個非常重要的特點就是“弱類型”,它讓PHP的程序變得非常容易編寫,新手接觸PHP能夠快速上手,不過,它也伴隨著一些爭議。支持變量類型的定義,可以說是革新性質的變化,PHP開始以可選的方式支持類型定義。除此之外,還引入了一個開關指令declare(strict_type=1);,當這個指令一旦開啟,將會強制當前文件下的程序遵循嚴格的函數傳參類型和返回類型。 例如一個add函數加上類型定義,可以寫成這樣: ?![PHP7革新與性能優化 - 徐漢彬Hansion - 技術行者](http://box.kancloud.cn/2015-09-16_55f901a59f662.png) 如果配合強制類型開關指令,則可以變為這樣: ?![PHP7革新與性能優化 - 徐漢彬Hansion - 技術行者](http://box.kancloud.cn/2015-09-16_55f901a5bdf1a.png) 如果不開啟strict_type,PHP將會嘗試幫你轉換成要求的類型,而開啟之后,會改變PHP就不再做類型轉換,類型不匹配就會拋出錯誤。對于喜歡“強類型”語言的同學來說,這是一大福音。 更為詳細的介紹: [PHP7標量類型聲明RFC[翻譯]??](http://hansionxu.blog.163.com/blog/static/241698109201522451148440/) ## 2.?更多的Error變為可捕獲的Exception PHP7實現了一個全局的throwable接口,原來的Exception和部分Error都實現了這個接口(interface),?以接口的方式定義了異常的繼承結構。于是,PHP7中更多的Error變為可捕獲的Exception返回給開發者,如果不進行捕獲則為Error,如果捕獲就變為一個可在程序內處理的Exception。這些可被捕獲的Error通常都是不會對程序造成致命傷害的Error,例如函數不存。PHP7進一步方便開發者處理,讓開發者對程序的掌控能力更強。因為在默認情況下,Error會直接導致程序中斷,而PHP7則提供捕獲并且處理的能力,讓程序繼續執行下去,為程序員提供更靈活的選擇。 例如,執行一個我們不確定是否存在的函數,PHP5兼容的做法是在函數被調用之前追加的判斷function_exist,而PHP7則支持捕獲Exception的處理方式。 如下圖中的例子(截圖來源于PPT內): ?![PHP7革新與性能優化 - 徐漢彬Hansion - 技術行者](http://box.kancloud.cn/2015-09-16_55f901a7c44dd.png) ## 3.?AST(Abstract?Syntax?Tree,抽象語法樹) AST在PHP編譯過程作為一個中間件的角色,替換原來直接從解釋器吐出opcode的方式,讓解釋器(parser)和編譯器(compliler)解耦,可以減少一些Hack代碼,同時,讓實現更容易理解和可維護。 PHP5: ?![PHP7革新與性能優化 - 徐漢彬Hansion - 技術行者](http://box.kancloud.cn/2015-09-16_55f901a7f307b.jpg)? PHP7: ?![PHP7革新與性能優化 - 徐漢彬Hansion - 技術行者](http://box.kancloud.cn/2015-09-16_55f901a832ed0.jpg) 更多AST信息: [https://wiki.php.net/rfc/abstract_syntax_tree](https://wiki.php.net/rfc/abstract_syntax_tree) ## 4.?Native?TLS(Native?Thread?local?storage,原生線程本地存儲) PHP在多線程模式下(例如,Web服務器Apache的woker和event模式,就是多線程),需要解決“線程安全”(TS,Thread?Safe)的問題,因為線程是共享進程的內存空間的,所以每個線程本身需要通過某種方式,構建私有的空間來保存自己的私有數據,避免和其他線程相互污染。而PHP5采用的方式,就是維護一個全局大數組,為每一個線程分配一份獨立的存儲空間,線程通過各自擁有的key值來訪問這個全局數據組。 而這個獨有的key值在PHP5中需要傳遞給每一個需要用到全局變量的函數,PHP7認為這種傳遞的方式并不友好,并且存在一些問題。因而,嘗試采用一個全局的線程特定變量來保存這個key值。 相關的Native?TLS問題: [https://wiki.php.net/rfc/native-tls](https://wiki.php.net/rfc/native-tls) ## 5.?其他新特性 PHP7新特性和變化不少,我們這里并不全部展開來細說哈。 (1)?Int64支持,統一不同平臺下的整型長度,字符串和文件上傳都支持大于2GB。 (2)?統一變量語法(Uniform?variable?syntax)。 (3)?foreach表現行為一致(Consistently?foreach?behaviors) (4)?新的操作符?,??? (5)?Unicode字符格式支持(\u{xxxxx}) (6)?匿名類支持(Anonymous?Class) …?…
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看