PHP命名空间(Namespace)简明教程


Posted in PHP onJune 11, 2014

这一特性在 PHP5.0x 时候就提出过,后来被取消并安排在 PHP6 中实现。而此次又再次“提前”到了 PHP5.3 发布,可见开发人员对其的重视以及谨慎的态度。

官方发布时说明文档的内容可能已过期(documentation maybe out dated),所以在这里简单的说明命名空间的用法:首先是声明一个命名空间,加入了新的关键字 namespace ,其应在类文件的开头

<?php   
namespace Project::Module;    
class User {       
    const STATUS_OK = true;       
    function register($data) {   
        ...       
    }   
    ...   
}?>

然后在控制器中(可能是其他文件)就可以这样调用

$user = new Project::Module::User();   
$user->register($register_info);

的确与平常的并无两样,但是我们可以将两个相互独立的类联系起来。比如
Project::Module::User;   
Project::Module::Blog;

这样就能从语言本身更容易描述和理解变量、类之间的关系,从而避免了“传统”上的 Project_Module_Blog 这样冗长的命名方式。

上面的说明可能很难说明使用命名空间带来了什么好处,新增加的 use 和 as 关键字或许能更好的说明问题。use 和 as 语句可以引用和声明 命名空间的“别名”。比如,上述的控制器中实例化类的代码可以这样写

use Project::Module;   
$user = new Module::User();    
$user->register($register_info);
 
甚至
use Project::Module::User as ModuleUser;   
$user = new ModuleUser;   
$user->register($register_info);

类中的常量也可以通过命名空间访问,比如上述类中的 STATUS_OK 就可以通过命名空间
Project::Module::User::STATUS_OK

访问。进一步的,也可以用别名简化那么长的“变量名称”
use Project::Module::User::STATUS_OK as STATUS_OK;
echo STATUS_OK;

顺便提下“超空间(The Global Namespace)”的概念。所谓的“超空间”,就是没有指定命名空间的变量、类和函数。比如
function foo() {   
    ...   
}

这的函数,可以使用 foo() 执行的同时,也可以使用 ::foo(); 这样执行。

最后,配合使用 autoload 函数即可载入指定命名空间的类。简单的函数如下

function __autoload( $classname ) {       
    $classname = strtolower( $classname );       
    $classname = str_replace( '::', DIRECTORY_SEPARATOR, $classname );   
    require_once( dirname( __FILE__ ) . '/' . $classname . '.class.php' );   
}

这样,比如调用
__autoload('Project::Module::User'); 

就可以自动载入 Project_Module_User.class.php 文件(虽然这样看起来并不方便多少)。
PHP 相关文章推荐
使用PHP编写发红包程序
Jul 22 PHP
PHP接收App端发送文件流的方法
Sep 23 PHP
PHP实现生成带背景的图形验证码功能
Oct 03 PHP
如何使用PHP给图片加水印
Oct 12 PHP
php版微信小店调用api示例代码
Nov 12 PHP
PHP 表单提交及处理表单数据详解及实例
Dec 27 PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 PHP
PHP实现负载均衡下的session共用功能
Apr 17 PHP
PHP7基于curl实现的上传图片功能
May 11 PHP
Laravel框架使用Seeder实现自动填充数据功能
Jun 13 PHP
小程序微信支付功能配置方法示例详解【基于thinkPHP】
May 05 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
Aug 12 PHP
PHP APC配置文件2套和参数详解
Jun 11 #PHP
PHP捕获Fatal error错误的方法
Jun 11 #PHP
PHP独立Session数据库存储操作类分享
Jun 11 #PHP
php调用nginx的mod_zip模块打包ZIP文件
Jun 11 #PHP
php+ajax导入大数据时产生的问题处理
Jun 11 #PHP
CI框架中libraries,helpers,hooks文件夹详细说明
Jun 10 #PHP
PHP图片等比例缩放生成缩略图函数分享
Jun 10 #PHP
You might like
PHP 验证码的实现代码
2011/07/17 PHP
yii实现图片上传及缩略图生成的方法
2014/12/04 PHP
codeigniter显示所有脚本执行时间的方法
2015/03/21 PHP
JS实现图片预加载无需等待
2012/12/21 Javascript
javaScript函数中执行C#代码中的函数方法总结
2013/08/07 Javascript
最简单的tab切换实例代码
2016/05/13 Javascript
js获取上传文件的绝对路径实现方法
2016/08/02 Javascript
js cookie实现记住密码功能
2017/01/17 Javascript
node.js实现登录注册页面
2017/04/08 Javascript
angularjs过滤器--filter与ng-repeat配合有奇效
2017/04/20 Javascript
js事件on动态绑定数据,绑定多个事件的方法
2018/09/15 Javascript
小程序从手动埋点到自动埋点的实现方法
2019/01/24 Javascript
Node.js Windows Binary二进制文件安装方法
2019/05/16 Javascript
微信小程序使用字体图标的方法
2019/05/23 Javascript
原生js实现碰撞检测
2020/03/12 Javascript
[01:16:37]【全国守擂赛】第三周决赛 Dark Knight vs. 一个弱队
2020/05/04 DOTA
浅析Python中MySQLdb的事务处理功能
2016/09/21 Python
Python写的一个定时重跑获取数据库数据
2016/12/28 Python
详解Python基础random模块随机数的生成
2019/03/23 Python
Python如何实现爬取B站视频
2020/05/20 Python
如何在mac下配置python虚拟环境
2020/07/06 Python
使用Python下载抖音各大V视频的思路详解
2021/02/06 Python
HTML5的革新 结构之美
2011/06/20 HTML / CSS
Erwin Müller穆勒家居瑞士官网:您整个家庭的邮购公司
2019/12/28 全球购物
L’Artisan Parfumeur官网:法国香水品牌
2020/08/11 全球购物
Loreto Gallo英国:欧洲领先的在线药房
2021/01/21 全球购物
关于圣诞节的广播稿
2014/01/26 职场文书
函授药学自我鉴定
2014/02/07 职场文书
三查三看党性分析材料
2014/02/18 职场文书
《最后的姿势》教学反思
2014/02/27 职场文书
销售内勤岗位职责范本
2015/04/13 职场文书
战马观后感
2015/06/08 职场文书
2019终止劳动合同协议书最新范本!
2019/07/09 职场文书
pytorch加载预训练模型与自己模型不匹配的解决方案
2021/05/13 Python
java高级用法JNA强大的Memory和Pointer
2022/04/19 Java/Android
nginx sticky实现基于cookie负载均衡示例详解
2022/12/24 Servers