在Tool.class.php 文件下的代码是:
namespace CompanyTool;
class Tool{
}
我的问题是为什么 在 其他文件下如果使用 Tool类 必须要这样写:use CompanyToolTool
我以为 只要写成 use CompanyTool 就行了(我理解的意思是可以使用这个空间下的任何类了)。希望大家讲讲,谢谢了。
C++就有你想要的using namespace xxx。
using namespace xxx
为啥PHP不直接引入整个命名空间,这大概参与设计的人才知道了。
我猜原因是避免一次引入过多不需要的东西,批量引入在各种语言中都是不推荐的。
精确到类可以提高性能。若只是精确到某个目录,每次加载类的时候,编译器仍然需要去目录中寻找该类是否存在。
精确到类可以避免冲突,若2个目录存在相同的类名,若精确到类,则很好的对冲突进行避免。
易于优化,C#拥有楼主所说的特性,但是C#是直接编译成可执行文件,但是java则采取的是精确到类的做法,同为解释型语言,这样做的好处是有利于后期的解释优化,让类能精准的被找到,减少缓存的消耗。
可以 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;吧
autoload
C++就有你想要的
using namespace xxx
。为啥PHP不直接引入整个命名空间,这大概参与设计的人才知道了。
我猜原因是避免一次引入过多不需要的东西,批量引入在各种语言中都是不推荐的。
精确到类可以提高性能。若只是精确到某个目录,每次加载类的时候,编译器仍然需要去目录中寻找该类是否存在。
精确到类可以避免冲突,若2个目录存在相同的类名,若精确到类,则很好的对冲突进行避免。
易于优化,C#拥有楼主所说的特性,但是C#是直接编译成可执行文件,但是java则采取的是精确到类的做法,同为解释型语言,这样做的好处是有利于后期的解释优化,让类能精准的被找到,减少缓存的消耗。
可以 use 一个类,也可以 use 一个命名空间
引用
或者
要是你那样写,势必会让
autoload
找不到这个文件。如果是手动载入文件的,从命名空间的理解出发也必须要那样写。而且我觉得提问的那个排版应该是namespace CompanyTool;
吧