<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 命名空間 命名空間簡單的說就是類似文件的路徑。為了解決命名沖突的問題產生的。比如在我們的代碼中經常遇到以下問題。 自己在一個目錄寫了一個類叫A. 另外一個人也寫了一個類叫A。就會產生一個沖突。最初的框架,比如ci框架,都是類的名字前面加上一CI_的前綴防止命名沖突。 命令空間的思想來源于路徑。比如在一個/www/目錄下不能存在兩個相同的文件。但是可以文件放在/www/a/ 、/www/b下面,這樣兩個文件就不會沖突。同理命名空間。如果在\www\a\A、\www\b\A 這兩個類也可以可以同時存在的。 命名空間的定義使用**namespace** 定義。只有類(包括抽象類和traits)、接口、函數和常量受到命名空間的影響。 命名空間的定義必須在腳本的首行。不能有bom,否則會出錯。 定義子命名空間用\分割。 也可以在一個文件定義多個命名空間。但是一般不這么做。 ```php namespace app; #子命名空間 namespace app\model; namespace app { function test(){} } namespace app2{ function test(){} } namespace { app\test(); app2\test(); } ``` ### 命名空間基礎 命名空間和路徑原理相似。所以有相對、絕對 - 非限定名稱、不包含前綴的類名稱。類似a.php 比如include('a.php') ```php $a = new Test();// 如果這個文件定義的命名空間是app。那么就是訪問的 app\Test類。 ``` - 限定名稱,或包含前綴 類似 文件路徑中的 a/c.php這種形式 ```php $a = new model\Test(); //如果該文件的命名空間是app。則訪問的就是app\model\Test ``` - 完全限制 類似文件中的絕對路徑 /www/a.php ```php $a = new \app\Test(); ``` ### 別名和導入 命名空間支持別名和引入外部的名字 所有支持命名空間的PHP版本支持三種別名或導入方式:為類名稱使用別名、為接口使用別名或為命名空間名稱使用別名 ```php namespace a; use app\model; use app\test\model as model2; ``` ### 全局命名空間 如果沒有定義任何命名空間,所有的類與函數的定義都是在全局空間,與 PHP 引入命名空間概念前一樣。在名稱前加上前綴?*\\*?表示該名稱是全局空間中的名稱 ```php namespace app; function test(){ new \Redis(); } ``` ### 名詞解析 ```php namespace A; use B\D, C\E as F; // 函數調用 foo(); // 首先嘗試調用定義在命名空間"A"中的函數foo() // 再嘗試調用全局函數 "foo" \foo(); // 調用全局空間函數 "foo" my\foo(); // 調用定義在命名空間"A\my"中函數 "foo" F(); // 首先嘗試調用定義在命名空間"A"中的函數 "F" // 再嘗試調用全局函數 "F" // 類引用 new B(); // 創建命名空間 "A" 中定義的類 "B" 的一個對象 // 如果未找到,則嘗試自動裝載類 "A\B" new D(); // 使用導入規則,創建命名空間 "B" 中定義的類 "D" 的一個對象 // 如果未找到,則嘗試自動裝載類 "B\D" new F(); // 使用導入規則,創建命名空間 "C" 中定義的類 "E" 的一個對象 // 如果未找到,則嘗試自動裝載類 "C\E" new \B(); // 創建定義在全局空間中的類 "B" 的一個對象 // 如果未發現,則嘗試自動裝載類 "B" new \D(); // 創建定義在全局空間中的類 "D" 的一個對象 // 如果未發現,則嘗試自動裝載類 "D" new \F(); // 創建定義在全局空間中的類 "F" 的一個對象 // 如果未發現,則嘗試自動裝載類 "F" // 調用另一個命名空間中的靜態方法或命名空間函數 B\foo(); // 調用命名空間 "A\B" 中函數 "foo" B::foo(); // 調用命名空間 "A" 中定義的類 "B" 的 "foo" 方法 // 如果未找到類 "A\B" ,則嘗試自動裝載類 "A\B" D::foo(); // 使用導入規則,調用命名空間 "B" 中定義的類 "D" 的 "foo" 方法 // 如果類 "B\D" 未找到,則嘗試自動裝載類 "B\D" \B\foo(); // 調用命名空間 "B" 中的函數 "foo" \B::foo(); // 調用全局空間中的類 "B" 的 "foo" 方法 // 如果類 "B" 未找到,則嘗試自動裝載類 "B" // 當前命名空間中的靜態方法或函數 A\B::foo(); // 調用命名空間 "A\A" 中定義的類 "B" 的 "foo" 方法 // 如果類 "A\A\B" 未找到,則嘗試自動裝載類 "A\A\B" \A\B::foo(); // 調用命名空間 "A\B" 中定義的類 "B" 的 "foo" 方法 // 如果類 "A\B" 未找到,則嘗試自動裝載類 "A\B" ```
                  <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>

                              哎呀哎呀视频在线观看