php的命名空间实例

php的命名空间实例

什么是命名空间?从广义上来说,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色。具体举个例子,文件 foo.txt 可以同时在目录/home/greg 和 /home/other 中存在,但在同一个目录中不能存在两个 foo.txt 文件 -- php手册

namespace 的定义和使用

-定义

<?php  // t1.php
    
namespace demo\index;

Class Test {
    // 执行自动调用
    public function __construct(){
        echo '1';
    }
}

<?php // t2.php

namespace demo\index;

include_once './t1.php';

$demo = new Test();

namespace 用来定义一个命名空间,由上面可以看出:t1|t2都是在demo\index 空间中, 可以用来共用类Test()

我们尝试将t2.php 删除其命名空间
t2.php 修改为

<?php 

use demo\index;  // 此时可以忽略

include_once './t1.php';

$demo = new demo\index\Test();

实际上她会去调用 命名空间下的类名,使用反斜杠,提供这种使用命名空间的方式,

来杜绝在使用类的时候出现混合类重复的现象|use 在这里只是申明解析的作用,具体请看下面

我们再次修改t1.php - t2.php

<?php // t1.php
namespace demo\index;

Class Test {

    // 执行自动调用
    public function __construct(){
        echo '1';
    }
}

namespace demo\index2;

Class Test {

    // 执行自动调用
    public function __construct(){
        echo '<br/>2';
    }
}

<?php  // t2.php

use demo\index as t1;
use demo\index2 as t2;

include_once './t1.php';

$demo1 = new t1\Test();
$demo2 = new t2\Test();

好,你可以看出,在t2中,我修改了use | demo 的写法

实际上,use 承接了一个声明解析的效果,我们在demo中调用类的时候,省去了一系列书写重复;

as 相当于等于的意思,使用t1 代表的就是 demo\index

引用类中的写法呢,说明了在类名即使相同,但是命名空间不同的清空下,即使是重复,也不会报错。就相当于我们访问的是两个不同文件夹中的相同名字的子文件,并不会造成不能重复命名的问题

学习地址-》 http://www.cnblogs.com/yjf512/archive/2013/05/14/3077285.html

posted @ 2018-05-12 11:36  mysure  阅读(150)  评论(0编辑  收藏  举报