簡單易懂的命名空間及use的使用

      最近一段時間在研究php框架,一直想的何時才能開發出本身的框架,固然這是爲了提高本身的編程水平,同時能把平時學的零散的東西糅合在一塊熟練應用。可是開發一個框架根本不知道如何作起,先開發什麼,雖然php的框架也很多,可是都是如何應用,沒有文檔和視頻能夠學習,這是讓我特別鬱悶的事情,相信很多想本身開發框架玩的小夥伴都有相似的感覺,鬱悶歸鬱悶,本身仍是動手作了,作的時候困難和想象的同樣難,從一開始就有點蒙了。php

  那就是命名空間的使用及use引入。看了不少網上的說法,也看了官方文檔,意思大概明白,也很好理解,命名空間還好說,給這個空間起個名字嘛,可是use具體操做起來就不行 了,怎麼也搞不通。後來看一個yii學習視頻才恍然明白。編程

  比方說建三個文件。php框架

  第一個文件 A.php,裏邊有兩個類,命名空間是 a\b\c;框架

<?php
namespace a\b\c;yii

class Apply{
  function get_info(){
    echo 'this is A Apply';
  }
}學習

class C{
  function info(){
    echo 'this is info';
  }
}ui

 

  第二個文件 B.php  命名空間 a\b\d;this

<?php
namespace a\b\d;spa

class Apply{
  function get_info(){
    echo 'this is B Apply';
  }
}視頻

 

  第三個文件 index.php ,用來使用上邊兩個文件的類。

  比方說咱們如今想實例化A.php裏的類,該怎麼實現呢?

首先要包含這個文件 require_once('A.php');

而後 use a\b\c;? 仍是a\b\c\A?   起初我也是這麼認爲的。其實這是錯的,use應該是這樣的,命名空間\這個空間下你要實例化類的類名。比方說咱們要實例化 A.php裏的Apply類,那麼 use a\b\c\Apply;  這就至關於引入這個類,接下來再  new Apply();調用裏邊的方法,跟日常是同樣的。若是要實例化類C,就 use a\b\c\C;

  注意:use不等於require_once或者include,use的前提是已經把文件包含進當前文件。

順便提一句,在MVC模式中,類名和文件名是相同的,因此use的時候會讓不瞭解的人覺得use後面跟的是文件名,我以前就這麼覺得的。其實use的仍是類名。

 

有的人可能問了,那我不一樣的命名空間下,有相同的類名,在同一個文件中使用怎麼辦?比方說咱們上邊的index.php,把A.php和B.php都包含進來,而後new Apply();這個時候是會報錯的,解決方案就是起別名,比方說 use a\b\d\Apply as b;  此時咱們new 的時候不該該寫成 new Apply();而是new b();這樣就不會發生衝突了。

相關文章
相關標籤/搜索