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();
结果
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。