php命名空間的設計思想和缺點

來源:互聯網
上載者:User
相比C#等語言,你可以在php函數裡面隨意定義變數並賦值,而不用擔心覆蓋了全域變數,或者類變數;你也可以隨意的定義類變數,而不用擔心會和函數名衝突,因為變數前面都有個$。

php的命名空間和全域變數、局部變數的設計思想一樣,都是為了儘可能的減少命名衝突。php的命名空間可以和檔案系統類似,有相對命名空間和絕對命名空間。

定義命名空間

必須是第一個語句,前面不能有任何語句,注釋可以。
必須是絕對命名空間。

namespace bookrpg\config;//或者namespace bookrpg\config{}namespace \bookrpg\config;  //錯誤,不能有前置\12345678910

匯入命名空間

必須是絕對命名空間。

use bookrpg\config\ClassName;use \bookrpg\config\ClassName; //可以有前置\,但不建議加use bookrpg\config\ClassName as NewClassName;use Exception;use \Exception; //可以有前置\,但不建議加123456

使用命名空間

使用絕對命名空間

$cls = new \bookrpg\config\ClassName();class MyException extends \Exception{}123456

使用相對命名空間

namespace bookrpg{    //等同於new \bookrpg\config\ClassName();    $cls = new config\ClassName();     //錯誤,php會認為是\bookrpg\Exception,而不是全域類Exception    $ex = new Exception(); }123456789

怪異的地方

C++、Java、C#都有相似的命名空間概念,而php的命名空間不跟隨大流,有自己的一套獨立的思想,對於先入為主的人來來說就顯得怪異和令人迷惑。

命名空間中居然有反斜線?
點號(.)已經被用作字串串連符了,又要區分絕對和相對命名空間,new .a.b.c()太不美觀,所以選擇反斜線吧。

一旦使用了命名空間,使用全域類也要加上“\”或者use一下,累不累呀?
沒辦法,為了嚴格類比檔案系統的概念,也為了隨便定義類名,而不用擔心類名衝突。

既然是嚴格類比檔案系統,為什麼定義和匯入命名空間的時候,前面不加\呢?
只能說,php的設計者不是完美主義者。

但php的命名空間確實缺乏邏輯完美性:

前置\的使用不統一,同樣是絕對命名空間,定義的時候不允許用,匯入的時候卻允許用。

即使是全域類,在非全域命名空間下,也必須使用前置\,而全域函數和變數又不受此限制。

使用建議

定義和匯入命名空間的時候,統一不加前置\

所有的類都使用use匯入,包括全域類,只命名空間類,有衝突的就as一下

禁止直接使用相對命名空間

理解了php命名空間的設計思想,並避免其設計不完美的地方,這樣看來php的命名空間也是很容易接受的。

上面是我整理給大家的php命名空間的設計思想和缺點,希望今後會對大家有協助。

相關文章:

PHP依賴倒置案例詳解

詳解php語言中的Laravel架構

PHP守護進程化的實現的方法

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.