php use 操作符闲话

use 操作符类似于 C++ 中的 using 语句。

在 PHP 中,use 操作符完成的工作称之为取别名。具体可以分为:

  1. 为类名称使用别名
  2. 为接口使用别名
  3. 为命名空间名称使用别名
  4. PHP 5.6开始允许导入函数或常量或者为它们设置别名。

use 的用法并不难掌握,但这里基于如下例子特别谈两点。

假如在全局命名空间有一个名为 Another 的类,请问就下面的代码而言,$obj1 和 $obj2 分别是实例化的是哪个类?

<?php
namespace foo;

$obj1 = new Another;
$obj2 = new \Another;
?>

答案是 $obj1 实例化的是 foo\Another 这个类(如果这个类不存在就会报错);$obj2 实例化的是全局命名空间中的 Another 类。

而我刚开始基于自己 C++ 的基础,认为 $obj1 实例化是全局命名空间中的 Another 类。但事实是 PHP 的命名空间和 C++还是有区别的。

就上面的例子而言,一点是对类名的解析,一点就是全局空间。

PHP 的全局空间使用 \ 来表示,就是说如果我们要使用全局命名空间中的一个类,必须像 $obj2 那样,使用 \ 来限定这个类;因为在 php 中实例化一个类时,如果这个类名不是完全限定的,比如上面的 new Another,PHP会基于当前命名空间去解析这个类名,所以 $obj1 才会被解析为 foo\Another 的实例。

最后很有意思的一点是,当我们在一个命名空间中,调用全局命名空间中的函数时,如果该命名空间中没有同名函数,函数名并不需要使用前导 \ 对函数名进行限定。

<?php
namespace foo;

$r = func()
?>

比如上面的代码,PHP 会调用全局命名空间中的 func 函数,而不是调用 foo\func;当然如果 foo 命名空间中定义了同名函数,这时如果还想调用全局命名空间中的 func 函数,还是需要使用前导 \ 对函数名进行限定的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值