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 相关文章推荐
967 个函式
Oct 09 PHP
PHP实现网上点歌(二)
Oct 09 PHP
Bo-Blog专用的给Windows服务器的IIS Rewrite程序
Aug 26 PHP
php+mysql事务rollback&amp;commit示例
Feb 08 PHP
php中引用符号(&amp;)的使用详解
Nov 13 PHP
PHP抓取远程图片(含不带后缀的)教程详解
Oct 21 PHP
利用PHP生成CSV文件简单示例
Dec 21 PHP
php+redis实现注册、删除、编辑、分页、登录、关注等功能示例
Feb 15 PHP
php四种定界符详解
Feb 16 PHP
PHP实现的简单对称加密与解密方法实例小结
Aug 28 PHP
php支付宝APP支付功能
Jul 29 PHP
PHP与Perl之间知识点区别整理
Mar 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
WordPress的主题编写中获取头部模板和底部模板
2015/12/28 PHP
使用PHP开发留言板功能
2019/11/19 PHP
PHP如何通过date() 函数格式化显示时间
2020/11/13 PHP
Extjs入门之动态加载树代码
2010/04/09 Javascript
关于this和self的使用说明
2010/08/01 Javascript
JS 实现完美include载入实现代码
2010/08/05 Javascript
javascript tips提示框组件实现代码
2010/11/19 Javascript
jquery sortable的拖动方法示例详解
2014/01/16 Javascript
thinkphp中常用的系统常量和系统变量
2014/03/05 Javascript
js实现跨域的方法实例详解
2015/06/24 Javascript
JS打字效果的动态菜单代码分享
2015/08/21 Javascript
JS简单实现移动端日历功能示例
2016/12/28 Javascript
解决layui追加或者动态修改的表单元素“没效果”的问题
2019/09/18 Javascript
JavaScript鼠标拖拽事件详解
2020/04/03 Javascript
JavaScript实时更新当前的时间的示例代码
2020/07/15 Javascript
JS删除对象中某一属性案例详解
2020/09/08 Javascript
Python将阿拉伯数字转换为罗马数字的方法
2015/07/10 Python
Python下载指定页面上图片的方法
2016/05/12 Python
python 捕获shell脚本的输出结果实例
2017/01/04 Python
python 中的divmod数字处理函数浅析
2017/10/17 Python
Python编程之黑板上排列组合,你舍得解开吗
2017/10/30 Python
Python解析命令行读取参数--argparse模块使用方法
2018/01/23 Python
Python查找两个有序列表中位数的方法【基于归并算法】
2018/04/20 Python
Python多进程池 multiprocessing Pool用法示例
2018/09/07 Python
解决python xlrd无法读取excel文件的问题
2018/12/25 Python
python中 * 的用法详解
2019/07/10 Python
Python Django 添加首页尾页上一页下一页代码实例
2019/08/21 Python
将python字符串转化成长表达式的函数eval实例
2020/05/11 Python
HTML高亮关键字的实现代码
2018/10/22 HTML / CSS
Html5 FileReader实现即时上传图片功能实例代码
2014/09/01 HTML / CSS
英国名牌服装购物网站:OD’s Designer
2019/09/02 全球购物
药品营销策划方案
2014/06/15 职场文书
学校2016年圣诞节活动总结
2016/03/31 职场文书
研究生毕业登记表的自我鉴定范文
2019/07/15 职场文书
CSS3 实现的图片悬停的切换按钮
2021/04/13 HTML / CSS
Python的property属性详细讲解
2022/04/11 Python