1.什么是命名空间?

    文件 foo.txt 可以同时在目录/home/greg 和 /home/other 中存在,
但在同一个目录中不能存在两个 foo.txt 文件。另外,在目录/home/greg 
外访问 foo.txt 文件时,我们必须将目录名以及目录分隔符放在文件名之前
得到 /home/greg/foo.txt。
    这就是命名空间,其目的是为了区分不同目录的同一文件,或者同一方法。
    详细:
   1. 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之
间的名字冲突。
   2.为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个
别名(或简短)的名称,提高源代码的可读性。

2.php支持命名空间

php >=5.3.0 是支持命名空间的

3.命名空间关键字

PHP支持两种抽象的访问当前命名空间内部元素的方法:
    __NAMESPACE__ 魔术常量
    namespace  关键字
    
    例如:
        namespace test;
        echo __NAMESPACE__;
    输出结果:
        test

4.简单例子

namespace test;

define('test\HELLO','hello world!');
define(__NAMESPACE__ . '\GOODBYE','goodbye cruel world');
define('GOODBYE','hahahha');
echo HELLO;
echo '<br>';
echo GOODBYE;
echo '<br>';
echo \GOODBYE;
echo '<br>';
echo \test\GOODBYE;
echo '<br>';
echo test\GOODBYE;
//Fatal error: Undefined constant 'test\test\GOODBYE' 
in /mnt/hgfs/www/test/test.php on line 16
//会找不到test  所以要在之前加  \ 表明当前test

结果
图片描述

5.调用命名空间

namespace test;

namespace home;

class mao {
    public function __construct() {}

    /**
     * echo
     */
    public function mao_test() {
        echo 'hello my namespace test';
    }
}
use home\mao as hahah;
$obj = new hahah();
$obj->mao_test();

结果
图片描述

6.多个命名空间的引用
test.php

namespace home;
class mao {
    public function __construct() {}
    /**
     * echo
     */
    public function mao_test() {
        echo 'hello my namespace test';
    }
}
namespace home2;
class mao {
    public function __construct() {}
    /**
     * echo
     */
    public function mao_test() {
        echo 'hello my namespace test2';
    }
}

index.php

namespace test;
require_once('test.php');
use home\mao as java;
$obj = new java();
$obj->mao_test();
echo '<br>';
use home2\mao as hah;
$obj = new hah();
$obj->mao_test();

结果
图片描述


mmy123456
376 声望17 粉丝

有项目请联系:15201970281(毛毛)