php 函数有命名空间吗_PHP解析之namespace

6fe288bdab9ea22a40064a828530ae18.png

为了更好的说明问题,假设主文件为 index.php,被引入的文件为 a.php。以两个文件为例来说明,使用 namespace 与 不使用 namespace 的区别。

大致分为四种情况:

  • case1 : index.php(根命名空间) + a.php(根命名空间)
  • case2 : index.php(根命名空间) + a.php(普通命名空间)
  • case3 : index.php(普通命名空间) + a.php(根命名空间)
  • case4 : index.php(普通命名空间) + a.php(普通命名空间)

根命名空间和普通命名空间做何解释?

任何 PHP 文件中函数、类、常量等定义都是放在命名空间之中的,当使用这些定义的时候会去命名空间中寻找。命名空间细分为根命名空间和普通命名空间。如果在 PHP 文件中没有使用 namespace ,则当前文件中的函数、类、常量等定义默认存储在根命名空间中,如果有使用 namespace X,则存储在普通命名空间 X 中。

CASE1 : 根命名空间 + 根命名空间

e8f5a5d560345ce9c52869ec499f408c.png

index.php 文件中代码可区分为两类:定义部分,逻辑部分。

定义部分会根据情况放置到不同的命名空间中,CASE1 情况下,index.php 文件本身定义的以及从 a.php 中加载的都会存储在大盒子(根命名空间),逻辑部分在调用时会从大盒子中寻找。

CASE2 : 根命名空间 + 普通命名空间

98b9ccaa2e4b00d65912c00d60536525.png

CASE2 情况下,因为 a.php 定义了 namespace a,所以对于 index.php 文件来说,其对应的命名空间既有大盒子(根命名空间),也有小盒子(普通命名空间a),如图,大盒子和小盒子彼此隔离,意味着大盒子里可以有 test(),小盒子里也可以有 test(),两者并不会相互冲突,调用的时候有一些关键点要注意。这部分在文章结尾会做说明。

CASE3 : 普通命名空间 + 根命名空间

660be8389bbc219023c917311dded443.png

CASE3 看起来只是将 CASE2 的顺序变更了一下,连图好像都没有什么区别。实质上的区别在于调用。工程的关键在于细节,这部分在文章结尾会做说明。

CASE4 : 普通命名空间 + 普通命名空间

a2d40c8de027f42fe071061a0bc573e6.png

CASE4 和前面 CASE 的不同在于,index.php 和 a.php 都定义了 namespace ,应该是没有根命名空间的,这里画出来是为了强调,根命名空间必然存在,只不过在当前情形下,根命名空间没有存储任何定义而已。

为了更好的理解上诉表达,针对不同 CASE 的情况,我构建了一些简单的测试代码,并在代码文件当中附带了说明,主要是前文所说的如何正确调用。可以去我的github下载不同 CASE 的测试文件。

更多文章,可查看个人博客。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值