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生成html分页列表的代码
Mar 18 PHP
PHP类的使用 实例代码讲解
Dec 28 PHP
php生成的html meta和link标记在body标签里 顶部有个空行
May 18 PHP
PHP+Mysql+jQuery实现动态展示信息
Oct 08 PHP
php数组函数序列之array_flip() 将数组键名与值对调
Nov 07 PHP
基于PHP遍历数组的方法汇总分析
Jun 08 PHP
php输出1000以内质数(素数)示例
Feb 16 PHP
PHP中使用addslashes函数转义的安全性原理分析
Nov 03 PHP
PHP实现连接设备、通讯和发送命令的方法
Oct 13 PHP
yii框架数据库关联查询操作示例
Oct 14 PHP
Laravel 实现添加多语言提示信息
Oct 25 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
Feb 15 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解析xml提示Invalid byte 1 of 1-byte UTF-8 sequence错误的处理方法
2013/11/14 PHP
php中hashtable实现示例分享
2014/02/13 PHP
ThinkPHP单字母函数(快捷方法)使用总结
2014/07/23 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
2020/04/04 PHP
js实现滚动条滚动到页面底部继续加载
2015/12/19 Javascript
JS事件添加和移出的兼容写法示例
2016/06/20 Javascript
BootStrap中的表单大全
2016/09/07 Javascript
nodejs判断文件、文件夹是否存在及删除的方法
2017/11/10 NodeJs
jQuery插件jsonview展示json数据
2018/05/26 jQuery
详解Vue开发微信H5微信分享签名失败问题解决方案
2018/08/09 Javascript
Angular设置别名alias的方法
2018/11/08 Javascript
微信小程序实现卡片左右滑动效果的示例代码
2019/05/01 Javascript
vue内置组件keep-alive事件动态缓存实例
2020/10/30 Javascript
[01:05:24]Ti4 冒泡赛第二天 iG vs NEWBEE 3
2014/07/15 DOTA
10种检测Python程序运行时间、CPU和内存占用的方法
2015/04/01 Python
在Python中使用HTMLParser解析HTML的教程
2015/04/29 Python
详谈python read readline readlines的区别
2017/09/22 Python
Django 忘记管理员或忘记管理员密码 重设登录密码的方法
2018/05/30 Python
python flask框架实现传数据到js的方法分析
2019/06/11 Python
python获取array中指定元素的示例
2019/11/26 Python
Python3.5 win10环境下导入kera/tensorflow报错的解决方法
2019/12/19 Python
keras训练曲线,混淆矩阵,CNN层输出可视化实例
2020/06/15 Python
canvas进阶之如何画出平滑的曲线
2018/10/15 HTML / CSS
如何使用amaze ui的分页样式封装一个通用的JS分页控件
2020/08/21 HTML / CSS
ALDO美国官网:加拿大女鞋品牌
2018/12/28 全球购物
Raffaello Network德国:意大利拉斐尔时尚购物网
2019/05/01 全球购物
屈臣氏乌克兰:Watsons UA
2019/10/29 全球购物
行政经理岗位职责
2013/11/09 职场文书
护理毕业生自我鉴定
2014/02/11 职场文书
喝酒检查书范文
2014/02/23 职场文书
理财计划书
2014/08/14 职场文书
安全生产警示教育活动总结
2015/05/09 职场文书
2016国庆节活动宣传语
2015/11/25 职场文书
高考满分作文赏析(2篇)
2019/08/12 职场文书
MySQL的存储函数与存储过程的区别解析
2022/04/08 MySQL
MySQL 外连接语法之 OUTER JOIN
2022/04/09 MySQL