命名空间只对类,函数,conts定义的常量起作用
在命名空间内三种方式访问元素
(1)非限定名称 访问最近的命名空间(就近访问上边与其挨着最近空间)
(2)完全限定名称 相当于绝对路径引入
(3)限定名称 相当于相对路径引入
元素引入
use 空间\...\元素;
空间引入 可以解决完全限定名称访问元素的繁琐性,但是还需要通过“限定名称”方式访问,仍然不够简便,如果引入空间的元素是类,就可以直接把这个类引入到当前空间,使用的时候也就可以通过“非限定名称”方式访问,非常便捷。
(只能做“类元素”引入,函数和常量不可以)
如果引入处的类和被引入的有重合就会出现错误。
别名使用
use 空间\元素 as 别名;
把其他空间的一个“类元素”引入到当前空间,如果当前空间也有一个“同名”的类元素,则引入元素与当前空间元素就会有冲突,为了避免冲突产生,可以引入空间元素起一个别名。
公共空间
一个php文件里边每天namespace关键字声明,则该文件的元素都存在于“公共空间”
访问公共空间的元素统一设置为 \元素
举例:
两个文件: a.php b.php (a.php include引入b.php)
1 a.php有namespace b.php没有 (b.php处于公共空间)
重点记忆: 被引入的空间不会对当前空间有任何的影响。
先获取当前空间,再获取公共空间
6、命名空间使用注意
1)声明命名空间的当前脚本的第一个namespace关键字前面不能有任何代码(header头代码也要写在下边)
2)命名空间是虚拟抽象的空间,不是真实存在的目录
3)相同请求的不同文件的同名空间里边不能有同名元素
有许多文件可以使用相同名称的命名空间
如果一个请求把它们都引进来了,则他们的同类型元素不能出现多个同名称的
例如:有四个文件分别是index.php,1.php,2.php,3.php,namespace.php,其内容分别为
(1)
namespace.php
<?php
usename Home;
const a = 10;
?>
1.php
<?php
require("namespace.php");
echo Home/a;
?>
2.php
<?php
require("namespace.php");
echo Home/a;
?>
3.php
<?php
require("namespace.php");
echo Home/a;
?>
index.php
<?php
require("1.php");
require("2.php");
require("3.php");
?>
namespace.php
<?php
usename Home;
const a = 10;
?>
1.php
<?php
echo Home/a;
?>
2.php
<?php
echo Home/a;
?>
3.php
<?php
echo Home/a;
?>
index.php
<?php
require("1.php");
require("2.php");
require("3.php");
?>
如果是这样的话,就能输出正确的结果