PHP 命名空间 解惑
2015-10-20 09:45
726 查看
官方解释在此: 命名空间概述
命名空间用一句话说,就是:把 类、函数、变量 等放到子文件夹中去,以避免命名冲突。
在每个 PHP 文件的最开始定义命名空间:
在定义命名空间之后引入命名空间:
上述代码中,
这两行的真实地址是: \TinyLara\TinyRoute、\TinyLara\TinyView\TinyView,顶级命名空间标识(第一个 \ )被省略了。
在上一节中中,这一行代码
的完整写法应该是:
如果不指定别名,那就默认别名为类名,注入当前命名空间。
命名空间的存在是为了解决下面两个问题:
用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。
目前非常流行的 Composer 就是一个基于命名空间的包管理器/依赖管理器,同样,Laravel 能达到今天的成功,很大程度上也是因为PHP5.3的普及,生恰逢时。你可以在 https://packagist.org/ 上下载到各种
composer 包,类似于 yum、npm或者gem。
直接调用即可。
用 PHP 做网站,用 Swift 搞 iOS,正在写《iOS 可视化编程与 Auto Layout》。
命名空间用一句话说,就是:把 类、函数、变量 等放到子文件夹中去,以避免命名冲突。
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. 命名空间的实际价值
命名空间的存在是为了解决下面两个问题:用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。
目前非常流行的 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
JohnLui
用 PHP 做网站,用 Swift 搞 iOS,正在写《iOS 可视化编程与 Auto Layout》。
相关文章推荐
- Yii2 Form表单样式修改
- 华为三层交换机STP配置
- PHP中如何使用session实现保存用户登录信息
- php json中文乱码问题
- 烂泥:ubuntu下配置msmtp+mutt发送邮件
- 烂泥:ubuntu下配置msmtp+mutt发送邮件
- PHP的语言结构和函数的区别
- php大力力:技术排错过程中,关键点总结和心情历程(2015-10-19)
- PHP 页面抓取技术
- Laravel安装
- PHP中如何使用session实现保存用户登录信息
- php上传大文件失败的原因及应对策略
- PHP判断上传文件类型的解决办法
- php文件上传你必须知道的几点
- php生成验证码函数
- php根据日期或时间戳获取星座信息和生肖等信息
- php获取远程文件大小
- php限制文件下载速度的代码
- PHP页面转UTF-8中文编码乱码的解决办法
- php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法