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中通过语义URL防止网站被攻击的方法分享
Sep 08 PHP
深入extjs与php参数交互的详解
Jun 25 PHP
PHP生成Gif图片验证码
Oct 27 PHP
PHP引用(&amp;)各种使用方法实例详解
Mar 20 PHP
ThinkPHP3.1数据CURD操作快速入门
Jun 19 PHP
PHP中遇到BOM、编码导致json_decode函数无法解析问题
Jul 02 PHP
CI框架Session.php源码分析
Nov 03 PHP
php数组操作之键名比较与差集、交集赋值的方法
Nov 10 PHP
php跨服务器访问方法小结
May 12 PHP
基于CI框架的微信网页授权库示例
Nov 25 PHP
PHP xpath()函数讲解
Feb 11 PHP
使用PHP开发留言板功能
Nov 19 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模板类代码
2008/09/07 PHP
PHP 加密与解密的斗争
2009/04/17 PHP
通过dbi使用perl连接mysql数据库的方法
2014/04/16 PHP
php同时使用session和cookie来保存用户登录信息的实现代码
2016/05/13 PHP
php  PATH_SEPARATOR判断当前服务器系统类型实例
2016/10/28 PHP
PHP中函数gzuncompress无法使用的解决方法
2017/03/02 PHP
javascript mouseover、mouseout停止事件冒泡的解决方案
2009/04/07 Javascript
JS基础之undefined与null的区别分析
2011/08/08 Javascript
jQuery实现form表单reset按钮重置清空表单功能
2012/12/18 Javascript
解析ScrollPic在ie8下只滚动一遍,然后变为空白 ie6,ie7,chrome,firefox正常
2013/06/26 Javascript
javascript中style.left和offsetLeft的用法说明
2014/03/07 Javascript
from表单多个按钮提交用onclick跳转不同action
2014/04/24 Javascript
javascript获取当前鼠标坐标的方法
2015/01/10 Javascript
微信小程序 支付功能(前端)的实现
2017/05/24 Javascript
jQuery pjax 应用简单示例
2018/09/20 jQuery
vue项目中使用scss的方法步骤
2019/05/16 Javascript
JS实现网页端猜数字小游戏
2020/03/06 Javascript
在Python中使用zlib模块进行数据压缩的教程
2015/06/26 Python
Python对数据库操作
2016/03/28 Python
Java与Python两大幸存者谁更胜一筹呢
2018/04/12 Python
python自动查询12306余票并发送邮箱提醒脚本
2018/05/21 Python
PyQt5根据控件Id获取控件对象的方法
2019/06/25 Python
使用pytorch和torchtext进行文本分类的实例
2020/01/08 Python
Python基于Socket实现简单聊天室
2020/02/17 Python
tensorflow 20:搭网络,导出模型,运行模型的实例
2020/05/26 Python
Selenium获取登录Cookies并添加Cookies自动登录的方法
2020/12/04 Python
Timberland美国官网:全球领先的户外品牌
2016/08/15 全球购物
无谷物狗粮:Pooch & Mutt
2018/05/23 全球购物
社会实践自我鉴定
2013/11/07 职场文书
获奖的大学生创业计划书
2014/01/05 职场文书
校园创业策划书
2014/01/14 职场文书
优秀老师事迹材料
2014/02/05 职场文书
学雷锋标语
2014/06/25 职场文书
党课培训心得体会
2014/09/02 职场文书
领导干部考核评语
2015/01/04 职场文书
彻底卸载VMware虚拟机的超详细步骤记录
2022/07/15 Servers