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

这一特性在 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 文件(虽然这样看起来并不方便多少)。

(0)

相关推荐

  • php命名空间学习详解

    1.什么是命名空间?命名空间是一种特殊的作用域,它包含处于该作用域下的标识符,同时它本身也是一种标识符.可以把命名空间与操作系统的目录对应起来.一个命名空间相当于一个目录,命名空间里的类,函数,常量,相当于目录里的文件.同一个目录(命名空间)里的文件名不能相同,但是不同的目录里可以有相同名字的文件.2.使用命名空间为了解决什么问题?解决名字冲突,比如定义了一个类,正好这个类与PHP内部的类或是include进来的一个类库里的类重名了.提高代码可读性,命名空间有一个别名功能,它可以帮你给一个长达十

  • thinkphp命名空间用法实例详解

    本文实例讲述了thinkphp命名空间用法.分享给大家供大家参考,具体如下: 新版本(3.2)中采用命名空间的方式定义和加载类库文件,解决多个模块之间的冲突问题,并实现了更加高效的自动加载机制. 需要给类库定义所在的命名空间,命名空间的路径和类库文件的目录一致,就可以实现类的自动加载,例如Org\Util\File类的定义为 namespace Org\Util; class File { } 其所在的路径是ThinkPHP/Library/Org/Util/File.class.php,我们实

  • PHP中的命名空间详细介绍

    概述 PHP对于命名空间的支持,经历了一段艰难的旅程.幸运的是,PHP从5.3开始引入了命名空间.自从PHP引入了命名空间,PHP代码的适用结构也得到了大大的改善.许多编程语言早就有了命名空间的概念,相对于其他语言来说,PHP对于命名空间的支持,稍微有点晚了.不管如何,每一种新特性的引入都有其目的,和其他语言一样,PHP引入命名空间也主要是为了解决名字冲突的问题. 命名空间(namespace)的概念 复制代码 代码如下: 当在字符串中使用命名空间名字的时候,一定不要忘了转义\ 可以将命名空间想

  • PHP命名空间(Namespace)的使用详解

    对于命名空间,官方文档已经说得很详细[查看],我在这里做了一下实践和总结. 命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误.这种情况下只要避免命名重复就可以解决,最常见的一种做法是约定一个前缀. 例:项目中有两个模块:article和message board,它们各自有一个处理用户留言的类Comment.之后我可能想要增加对所有用户留言的一些信息统计功能,比如说我想得到所有留言的数量.这时候调用它们Comment提供的方法是很好的

  • PHP生成器简单实例

    一般你在迭代一组数据的时候,需要创建一个数据,假设数组很大,则会消耗很大性能,甚至造成内存不足. 复制代码 代码如下: //Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes) in E:\php\test\index.php on line 5 range(1, 100000000); PHP5.5实现了生成器,每当产生一个数组元素则用yield关键词返回,并且执行函

  • PHP新特性详解之命名空间、性状与生成器

    本文主要跟大家介绍了关于PHP新特性之命名空间.性状与生成器的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍: 1.命名空间 命名空间是什么? 1).命名空间在PHP 5.3中被引入,类似于文件夹的功能.例如Symfony框架中的Request和Response,位于Symfony的命名空间下. 2).命名空间始终应该在<?php标签的下面一行. 3).PHP文件的命名空间和操作系统的物理文件系统不同,这是一个虚拟的概念,没有必要和文件系统的目录结构完全对应.虽然如此,绝大多数PHP

  • PHP命名空间namespace定义及导入use用法详解

    本文实例讲述了PHP命名空间namespace定义及导入use用法.分享给大家供大家参考,具体如下: 在PHP中,出现同名函数或是同名类是不被允许的.为防止编程人员在项目中定义的类名或函数名出现重复冲突,在PHP5.3中引入了命名空间这一概念. 1.命名空间,即将代码划分成不同空间,不同空间的类名相互独立,互不冲突.一个php文件中可以存在多个命名空间,第一个命名空间前不能有任何代码.内容空间声明后的代码便属于这个命名空间,例如: <?php echo 111; //由于namespace前有代

  • PHP命名空间namespace用法实例分析

    本文实例讲述了PHP命名空间namespace用法.分享给大家供大家参考,具体如下: namespace(命名空间)相当于函数.类,划分了一个区域,这样子就使得在同个页面中可以require相同的类,使用相同名字的函数 : 在项目中比较少用 name.php: <?php //命名要使用复合名称 namespace me\mine; class me{ public function __construct(){ echo 'name'.'<br>'; } public function

  • PHP命名空间namespace的定义方法详解

    本文实例讲述了PHP命名空间namespace的定义方法.分享给大家供大家参考,具体如下: 定义命名空间 对于空间的命名,在此我想不用文字解释,更好的解释是用实例来证明: For example: 下面这段代码是"test.php"里面的文件: namespace Test; class Test{ public function Ttest(){ echo "这是Test里面的测试方法"."<br>"; } } 接下来我将用三种不同

  • PHP命名空间namespace及use的简单用法分析

    本文实例讲述了PHP命名空间namespace及use的简单用法.分享给大家供大家参考,具体如下: 最近一段时间在研究php框架,一直想的什么时候才能开发出自己的框架,当然这是为了提升自己的编程水平,同时能把平时学的零散的东西糅合在一块熟练应用.但是开发一个框架根本不知道如何做起,先开发什么,虽然php的框架也不少,但是都是如何应用,没有文档和视频可以学习,这是让我特别郁闷的事情,相信不少想自己开发框架玩的小伙伴都有类似的感受,郁闷归郁闷,自己还是动手做了,做的时候困难和想象的一样难,从一开始就

  • php 命名空间(namespace)原理与用法实例小结

    本文实例讲述了php 命名空间(namespace)原理与用法.分享给大家供大家参考,具体如下: 命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误.这种情况下只要避免命名重复就可以解决,最常见的一种做法是约定一个前缀,也可以采用命名空间的方式解决 TestSpace.php <?php namespace Demo\Test; //声明一个命名空间Demo class Test1 { static function test() {

  • PHP命名空间(namespace)原理与用法详解

    本文实例讲述了PHP命名空间(namespace)原理与用法.分享给大家供大家参考,具体如下: PHP 命名空间(namespace)是在PHP 5.3中加入的,它可以解决以下两类问题: 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突. 为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性. 我们在默认情况下,所有常量.类和函数名都放在全局空间下,就和PHP支持命名空间之前一样,命名空间通过关键字namespace

  • PHP命名空间(namespace)的使用基础及示例

    PHP的命名空间(namespace)是PHP 5.3中加入最重要的一个新特性,这个概念在C#中已经很早就有了,php中的namespace其实和c#的概念是一样的. 一. PHP的命名空间主要解决三种冲突的问题:常量,函数,类 通俗理解:namespace就相当于是用来建一个目录,将namespace下面的代码放在该目录里面,与外面的区分开来. /* |--------------------------------- |namespace示例 |@黑眼诗人 <www.chenwei.ws>

  • 浅析JavaScript中命名空间namespace模式

    namespace即"命名空间",也称"名称空间" ."名字空间".JavaScript不像C#或Java,有专门的namespace和package语法支持,当JS复杂到一定程度,尤其是引用大量的第三方JS框架和类库之后,命名冲突就会成为一个严重的问题,因此使用JS自己的变通方式建立命名空间很重要. 命名空间有助于减少程序中所需要的全局变量的数量,并且同时有助于避免命名冲突或过长的名字前缀. 关于命名空间的例子: /** * 创建全局对象MYA

  • PHP命名空间(namespace)的动态访问及使用技巧

    PHP的命名空间(namespace)是PHP 5.3中加入最重要的一个新特性,这个概念在C#中已经很早就有了,php中的namespace其实和c#的概念是一样的. 一.动态访问命名空间的元素 namespace me\poet; function test() { echo '1111'; } $fun = 'test';//不能这么用,最后$fun()无法动态调用到test():Fatal error: Call to undefined function test() $fun = '\

随机推荐