PHP 命名空间 解惑

官方解释在此: 命名空间概述

命名空间用一句话说,就是:把 类、函数、变量 等放到子文件夹中去,以避免命名冲突。

2. 被隐藏的第一个 \

在每个 PHP 文件的最开始定义命名空间:

<?php namespace TinyLara\TinyRoute;

class TinyRoute {
  ...
}

在定义命名空间之后引入命名空间:

<?php namespace TinyLara\TinyRoute;

use TinyLara\TinyView\TinyView;

class TinyRoute {
  ...
}

上述代码中,

namespace TinyLara\TinyRoute
use TinyLara\TinyView\TinyView

这两行的真实地址是: \TinyLara\TinyRoute、\TinyLara\TinyView\TinyView,顶级命名空间标识(第一个 \ )被省略了。

3. 被隐藏的别名

在上一节中中,这一行代码

use TinyLara\TinyView\TinyView

的完整写法应该是:

use \TinyLara\TinyView\TinyView as TinyView;

如果不指定别名,那就默认别名为类名,注入当前命名空间。

4. 使用绝对路径直接调用

<?php namespace TinyLara\TinyRoute;

class TinyRoute {
    public function foo()
    {
        return \TinyLara\TinyView\TinyView::fuck();
    }
}

使用绝对路径调用类时顶级命名空间标识(第一个 \ )不能省略。(很多人都在这个地方迷惑了)

5. 命名空间的实际价值

命名空间的存在是为了解决下面两个问题:

  1. 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
  2. 为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。

目前非常流行的 Composer 就是一个基于命名空间的包管理器/依赖管理器,同样,Laravel 能达到今天的成功,很大程度上也是因为PHP5.3的普及,生恰逢时。你可以在 https://packagist.org/ 上下载到各种 composer 包,类似于 yum、npm或者gem。

6. 同一命名空间下的类可以任意相互调用

<?php namespace A;

class ClassA {
  public static function test() {
    echo 'Success!';
  }
}
<?php namespace A;

class ClassB {
  public static function test() {
    ClassA::test(); // 直接调用即可
  }
}

直接调用即可。

WRITTEN BY
avatar
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值