命名空间的基础认识
主要知识点
1)命名空间的创建与用法
2)use的用法
非限定名称,限定名称和完全限定名称的命名空间之间的区别与联系是什么?
* 非限定名称: 类似当前目录下访问(在当前空间内访问不需要添加空间前缀)
* 限定名称: 类似于相对路径访问(当前文件名\该文件空间内的子名)
* 完全限定名称: 从全局空间开始,类似于从根目录开始(\上一级目录\上一级目录空间的子名)
* 例如:root/a/b 表示b的目录路径
* 当b访问自身时,只需直接访问自身空间
* 当b访问a时,需要通过全局访问到a的空间
* 而a访问b时,需要通过a/b就能访问b的空间,而不用通过全局访问
代码
用大括号语法实现在一个脚本中创建多个命名空间并访问成员
<?php namespace one{ class Test { private $name = 'Tom'; public function show() { return 'i am '.$this->name; } } } namespace two{ class Test { private $name = 'Jack'; const SITE='FEED'; public function show() { return 'i am '.$this->name; } } } namespace other{ class Test { private $name = 'None'; public function show() { return 'i am '.$this->name; } } } namespace three{ use one\Test; echo (new Test())->show().'<hr>'; echo '当前命名空间是: ',__NAMESPACE__,'<hr>'; echo (new \two\Test)->show().'<br>'; echo \two\Test::SITE.'<hr>'; } namespace { // use other\Test; echo '当前命名空间是: ',__NAMESPACE__,'<br>'; echo (new other\Test)->show().'<hr>'; }
使用use 导入其它脚本中的类/常量/函数,并使用别名方式访问
test1/Test1.php
<?php namespace test1; require './test2/Test2.php'; use test2\Test2; class Test1 { public function index() { $getit = new Test2(); return $getit->get(); } }
test2/Test2.php
<?php namespace test2; class Test2 { public function get() { return __CLASS__; } }
tes3.php
<?php require './test1/Test1.php'; use test1\Test1; $test = new Test1(); echo $test->index();
运行结果