-
慕斯709654
不是,你截图的区域还是在 Goods下直到下一个namespace关键字开始,才属于不在Goods空间的地盘use Money 表示new的时候,因为是在Goods空间下new的,所以默认在当前命名空间下new的 ,引入Goods空间下面的 Money 这个类
另外在正式开发下,一个php文件 只对应一个namespace,一个类 占一个php文件
-
白衣染霜花
namespace Goods;这句就是命名空间。说白了,就是把类分组。有点抽象。差不多得弄清楚以下情况。两个类,A类调用B类《1》A和B都是用了同一个命名空间
《2》AB都用了不同的命名空间
《3》A用了命名空间,B没用命名空间
-
蛊毒传说
namespace Goods;//命名空间命名空间是将代码划分出不同的空间(区域),每个空间的常量、函数、类的名字互不影响,这个有点类似我们常常提到的‘封装'的概念.use xxx;//加载某个命名空间namespace Goods;到namespace Car;之间都属于Goods的空间范围
-
一只斗牛犬
示例代码并不规范,所以不太好理解。先解释下问题。
图中区域的命名间是 Goods;
namespace Goods;
class goods_category{}
use Money;
// 没有重新声明新的命名空间,这里可以直接调用相同空间下的类
new goods_category();
// use引入了一个命名空间(并不是替代),所以可以使用Money空间下的内容,假设Money下有一个Test类
new Test();//没有毛病
// 不过如果Money也有一个goods_category类,那这里要设该类就只能这样了
new Money\goods_category();
namespace Car;
// 已经重新声明命名空间为Car,所以这里就不能直接调用Goods空间下的类
// new goods_category(); Fatal error: Class 'Car\goods_category' not found
new \Goods\goods_category(); // 不使用use的情况下只能完整加上命名空间
根据PSR规范,一个源文件只能有一个类名,并且完整的类名必须有一个最终的类名,所以也只能有一个命名空间(PSR把命名空间分为顶级命名空间和子命名空间,这里说的一个是指顶级命名空间和子命名空间合起来之后的结果)。
-
繁华开满天机
@乌啦啦 测试一下
-
蓝山帝景
相同的命名空间的类在调用时不必use,命名空间只是类的一个归类。不是留几个空行就是空间。