搜尋

首頁  >  問答  >  主體

PHP use 命名空間時,為什麼要精確到命名空間下的一個類

#在Tool.class.php 檔案下的程式碼是:

namespace CompanyTool;

class Tool{

#}

我的問題是為什麼 在 其他文件下如果使用 Tool類別 必須這樣寫:use Company\Tool\Tool

我以為 只要寫成 use Company\Tool 就行了(我理解的意思是可以使用這個空間下的任何類別了)。
希望大家講講,謝謝了。

曾经蜡笔没有小新曾经蜡笔没有小新2736 天前658

全部回覆(3)我來回復

  • 巴扎黑

    巴扎黑2017-06-06 09:55:57

    C++就有你想要的using namespace xxx

    為啥PHP不直接引入整個命名空間,這大概參與設計的人才知道了。

    我猜原因是避免一次引入過多不需要的東西,批量引入在各種語言中都是不推薦的。

    回覆
    0
  • ringa_lee

    ringa_lee2017-06-06 09:55:57

    1. 精確到類別可以提高效能。若只是精確到某個目錄,每次載入類別的時候,編譯器仍然需要去目錄中尋找該類別是否存在。

    2. 精確到類可以避免衝突,若2個目錄存在相同的類名,若精確到類,則很好的對衝突進行避免。

    3. 易於優化,C#擁有樓主所說的特性,但是C#是直接編譯成可執行文件,但是java則採取的是精確到類的做法,同為解釋型語言,這樣做的好處是有利於後期的解釋優化,讓類能精準的被找到,減少快取的消耗。

    回覆
    0
  • PHPz

    PHPz2017-06-06 09:55:57

    可以 use 一個類,也可以 use 一個命名空間

    namespace A;
    class B
    {
        public function test() {}
    }

    引用

    namespace C;
    use A;
    $b = new A\B();
    $b->test();

    namespace C;
    use A\B;
    $b = new B();
    $b->test();

    要是你那樣寫,勢必會讓autoload找不到這個檔案。如果是手動載入檔案的,從命名空間的理解出發也必須那樣寫。而且我覺得問問題的那個排版應該是namespace CompanyTool;

    回覆
    0
  • 取消回覆