图中的区域就代表 Money 命名空间吗 ?
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把命名空间分为顶级命名空间和子命名空间,这里说的一个是指顶级命名空间和子命名空间合起来之后的结果)。
2 回答1.6k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答993 阅读✓ 已解决
2 回答1.1k 阅读
1 回答937 阅读
1 回答893 阅读
1 回答888 阅读
不是,你截图的区域还是在 Goods下
直到下一个namespace关键字开始,才属于不在Goods空间的地盘
use Money 表示new的时候,因为是在Goods空间下new的,所以默认在当前
命名空间下new的 ,引入Goods空间下面的 Money 这个类
另外在正式开发下,一个php文件 只对应一个namespace,一个类 占一个php文件