<address id="xdftd"><form id="xdftd"><meter id="xdftd"></meter></form></address>
              <form id="xdftd"><nobr id="xdftd"><nobr id="xdftd"></nobr></nobr></form>

                  <sub id="xdftd"></sub>

                        <address id="xdftd"><nobr id="xdftd"></nobr></address>

                          福州網站建設>網站新聞>php技術

                          PHP namespace、require、use區別

                          發布日期:2019-10-28瀏覽次數:965 來源:福州網站建設

                          假設 有文件a.php 代碼

                          復制代碼
                          <?php class a{//類a public function  afun()//函數afun {
                              echo "aaaa";
                          }
                          } ?>
                          復制代碼

                          有文件b.php 代碼

                          復制代碼
                          <?php class a{//類a public function  bfun()//函數bfun {
                              echo "aaaa";
                          }
                          } ?>
                          復制代碼

                          有文件c.php 現在有如下需求 

                          需求1:需要在c.php中調用afun()。

                          需求1很簡單 大家都懂 把a.php文件引入進來然后實例化a對象就行,require_once('a.php');

                          需求2:在c.php中調用bfun()

                          與上面一樣 require_once('b.php')就行。

                          需求3:在c.php中同時調用afun()與bfun()

                          問題來了,如果同時require文件a,php,b.php那么實例化對象時class a到底是a.php中的還是b.php的?(哪些鉆牛角尖說你不會把b.php中的class a換成其他名字 請繞道?。?于是為了方便管理類引入了命名空間namespace。

                          好下面 我們修改文件a.php b.php 代碼加入命名空間!

                          a.php:

                          復制代碼
                          <?php namespace ns\a;//定義命名空間 class a{//類a  public function  afun()//函數afun {    echo "aaaa";
                              }
                              } ?>
                          復制代碼

                          b.php:

                          復制代碼
                          <?php namespace ns\b;//定義命名空間 class a{//類a public function  bfun()//函數bfun {
                              echo "aaaa";
                          }
                          } ?>
                          復制代碼

                          于是在c.php中我們就可以引用上面定義命名空間 怎么引用?這是關鍵字use就出來了!

                          c.php:在c.php同時調用afun,bfun

                          復制代碼
                          <?php
                          require_once('a.php');//引入文件a.php require_once('\b.php');//引入文件a.php use ns\a\a as a; //使用命名空間ns\a中的類a 并用a替換 use ns\b\a as b;//使用命名空間ns\b中的類a 并用b替換 $a=new a();//實例化a.php 中的類a $a->afun();
                          $a=new b();//例化b.php 中的類a $a->bfun();
                          復制代碼

                          上面的例子應該足以說明namespace 、 use的關系

                          下面總結下:

                          可以這樣理解 namespace 命名空間是為了方便管理類而引入的機制,我們可以將功能相近的類都放在同一命名空間下,在使用時直接引入該空間就可以了,簡單的說namespace 就是將里面的類打個包。比如下面代碼:

                          復制代碼
                          namespace my\test; class a
                          { public function  test()
                                {
                                    echo "aaaa";
                                }
                          } class c
                          { public function  test()
                              {
                                  echo "aaaa";
                              }
                          }
                          復制代碼

                          我們通過命名空間就可以把類a與類c歸集在一起。當然類a與類c可以在不同的文件中定義只要它們的命名空間相同 它們就會歸集在一起。這樣的機制下我們會發現以后類的組織會很清晰!我們把類通過namespace "打包"后 在使用時 只要通過use引入該“包”即可調用該類!如果我們項目的文件很多、類成千上萬 那么對類的管理至關重要,這也是為什么很多php框架都用命名空間的原因,當然了你自己寫小項目玩玩就不需要用了!

                          注意

                          關鍵字namespace后面跟的是名稱 不是路徑!我們看到很多框架 namespace  后面都跟著“路徑”其實是為了讓我們知道該命名空間所在的文件位置 當我們文件很多時,這樣的名稱會方便我們查找。

                          關鍵字use使用時后面一般跟類名 比如:

                          use a\b //表示使用命名空間下的類b 

                          use a\b as c //表示使用命名空間下的類b 并額外賦予額外標示c 即可以把c但類b使用

                          其實use 可以不使用!如在上面的例子文件a.php中我們使用class a;

                          use ns\a as a;

                          $a=new a();

                          等同于:

                          $a=new ns\a\a();

                          還有namespace  use與require_once(include類似)作用完全不同!很多人以為use就是把文件包含進來 這是錯誤的觀點!甚至還有人認為有use就不需要require了,這樣的觀點只能說明根本不了解命名空間的用途!試想一下我們要使用use如果連命名空間在哪里都不知道,那么怎么使用類?所以如果命名空間在其他文件中必須使用require(include)先將文件包含進來!

                          以上是由福州網站建設的小編為你分享了"PHP namespace、require、use區別"文章,如果你在這方面有什么問題,隨時聯系我們

                          php技術有關的文章
                          如果您有什么問題,歡迎咨詢我們客服! 點擊QQ咨詢
                          双乳被三男吸的小说

                            <address id="xdftd"><form id="xdftd"><meter id="xdftd"></meter></form></address>
                                      <form id="xdftd"><nobr id="xdftd"><nobr id="xdftd"></nobr></nobr></form>

                                          <sub id="xdftd"></sub>

                                                <address id="xdftd"><nobr id="xdftd"></nobr></address>