批改状态:合格
老师批语:命名空间与目录的关系非常相似,不是吗?
1、namespace: 声明一个命名空间。
2、完全限定名称:总是从根空间开始,第一个字符一定是反斜线。
3、限定名称:成员名称前面至少要一个命名空间, 至少要有一个反斜线,且不能在首位。
4、非限定名称:成员前面不能有任何的命名空间,不能有反斜线。
5、导入:使用use关键字;别名:使用as关键字;。
6、::class:直接返回的完全限定的类名;__NAMESPACE__:直接返回的当前空间名称。
对于函数的常量,在当前空间找不到,会自动到全局空间下找。
三类命名空间:
<?phpnamespace texhong\nhontrach;// 声明命名空间必须是程序脚本的第一条语句class Demo{const DEPART = 'texhong_phongnhansu';}namespace texhong\nganlong;class Demo{const DEPART = 'nganlong_phongnhansu';}namespace texhong;class Demo{const DEPART = 'phongnhansu';}// 非限定名称:只能访问当前空间下成员echo Demo::DEPART .'<br>';// 限定名称:在具的层级关系的空间下访问深层级的空间成员echo nganlong\Demo::DEPART .'<br>';// 完全限定名称:可以访问所有空间下成员echo \texhong\nhontrach\Demo::DEPART .'<br>';
演示效果图:

别名:
<?phpnamespace texhong\nhontrach\xuatnhapkhau\nhanviengiayto;class Nhanvien{const NAME = 'cu';}namespace texhong\nhontrach\xuatnhapkhau\nhanviengiayto;class Chuquan{const NAME = 'hien';}// 1. 当要多次使用较长空间名称的时候,给空间起个别名会很方便// 给外部的空间起了一个别名use texhong\nhontrach\xuatnhapkhau\nhanviengiayto as tnxn;// 别名调用echo tnxn\Nhanvien::NAME .'<br>';echo tnxn\Chuquan::NAME .'<hr>';// 2. 类级的别名:空间名带上类名称use texhong\nhontrach\xuatnhapkhau\nhanviengiayto\Nhanvien as NH;echo NH::NAME .'<hr>';namespace test;// 当类别名和原名一样时,可以省略use texhong\nhontrach\xuatnhapkhau\nhanviengiayto\Nhanvien;echo Nhanvien::NAME .'<hr>';
演示效果图:

其实就是通过封装一个函数,实现自动加载
命名空间必须和类文件所在的绝对路径一一对应
当前类名称与当前的类文件的名称完全一致
// 自动加载器<?phptry {// 注册自动加载spl_autoload_register(function($className){//1. 应该将类名中的命名空间的分隔符转为目录分隔符$path = str_replace('\\', DIRECTORY_SEPARATOR, $className);// 2. 生成真正要加载的类文件名称$file = __DIR__ . DIRECTORY_SEPARATOR . $path . '.php';// 3. 加载这个文件require $file;});} catch (Exception $e) {die($e->getMessage());}// 使用自动加载namespace testAutoload;require 'autoload.php';use inc\lib\Demo1;use inc\lib\Demo2;use inc\lib\Demo3;echo Demo1::show() .'<hr>';echo Demo2::show() .'<hr>';echo Demo3::show() .'<hr>';
要加载文件目录:

演示效果图:

1、命名空间借鉴了传统的使用目录管理文件的方式, 来管理程序中的全局成员。
2、完全限定名称、非完全限定名称、非限定名称。(都是名称,也就是名字,相当于文件名。)
3、三者区别在于目录层级的深浅。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号