为了账号安全,请及时绑定邮箱和手机立即绑定

php 的 命名空间的问题 !!!请教各位大牛了,一直没搞懂这个 。。。。

php 的 命名空间的问题 !!!请教各位大牛了,一直没搞懂这个 。。。。

PHP
GCT1015 2019-03-13 12:23:25
图中的区域就代表 Money 命名空间吗 ?
查看完整描述

5 回答

?
慕斯709654

TA贡献1840条经验 获得超5个赞

不是,你截图的区域还是在 Goods下
直到下一个namespace关键字开始,才属于不在Goods空间的地盘
use Money 表示new的时候,因为是在Goods空间下new的,所以默认在当前
命名空间下new的 ,引入Goods空间下面的 Money 这个类

另外在正式开发下,一个php文件 只对应一个namespace,一个类 占一个php文件

查看完整回答
反对 回复 2019-03-18
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

namespace Goods;这句就是命名空间。
说白了,就是把类分组。有点抽象。
差不多得弄清楚以下情况。两个类,A类调用B类
《1》A和B都是用了同一个命名空间

《2》AB都用了不同的命名空间

《3》A用了命名空间,B没用命名空间

查看完整回答
反对 回复 2019-03-18
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

namespace Goods;//命名空间
命名空间是将代码划分出不同的空间(区域),每个空间的常量、函数、类的名字互不影响,这个有点类似我们常常提到的‘封装'的概念.
use xxx;//加载某个命名空间
namespace Goods;到namespace Car;之间都属于Goods的空间范围

查看完整回答
反对 回复 2019-03-18
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

示例代码并不规范,所以不太好理解。先解释下问题。

图中区域的命名间是 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把命名空间分为顶级命名空间和子命名空间,这里说的一个是指顶级命名空间和子命名空间合起来之后的结果)。

查看完整回答
反对 回复 2019-03-18
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

@乌啦啦 测试一下

查看完整回答
反对 回复 2019-03-18
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

相同的命名空间的类在调用时不必use,命名空间只是类的一个归类。不是留几个空行就是空间。

查看完整回答
反对 回复 2019-03-18
  • 5 回答
  • 0 关注
  • 504 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信