搜索

首页  >  问答  >  正文

PHP use 命名空间时,为什么要精确到命名空间下的一个类

在Tool.class.php 文件下的代码是:

namespace CompanyTool;

class Tool{

}

我的问题是为什么 在 其他文件下如果使用 Tool类 必须要这样写:use CompanyToolTool

我以为 只要写成 use CompanyTool 就行了(我理解的意思是可以使用这个空间下的任何类了)。
希望大家讲讲,谢谢了。

曾经蜡笔没有小新曾经蜡笔没有小新2798 天前688

全部回复(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
  • 取消回复