PHP基础:命名空间基础知识及类文件的自动加载
1.命名空间基础知识
1.1声明命名空间的语法
用关键字
namespace
来声明命名空间namespace 空间名称;
1.2命名空间的使用:
非限定名称:成员前面不添加任何的空间名称,包括\,相当于当前路径
限定名称:成员前面至少要有1个命名空间和1个反斜线\, 且反斜线\不能在首位, 相当于相对路径
完全限定名称:第一个字符一定是反斜线(反斜线代表根空间), 然后再跟上命名空间,相当于绝对路径
1.3命名空间的应用场景:
非限定名称:可应用于访问当前命名空间里的成员
限定名称:可应用于访问下级命名空间里的成员
完全限定名称:可应用于所有场景,不管当前处在哪个空间下,利用完全限定名称都可访问到指定成员
1.4 代码示例
// 命名空间
namespace D盘;
// 相当于磁盘目录
class file{
const FILENAME= __CLASS__;
}
// 非限定名称:成员前面不添加任何的空间名称,包括\,相当于当前路径
echo file::FILENAME,'<hr>';
namespace D盘\一级目录;
// 相当于1级目录
class file{
const FILENAME= __CLASS__;
}
// 限定名称:成员前面至少要有1个命名空间和1个反斜线\, 且反斜线\不能在首位, 相当于相对路径
echo 二级目录\file::FILENAME,'<hr>';
namespace D盘\一级目录\二级目录;
// 相当于2级目录
class file{
const FILENAME= __CLASS__;
}
// 完全限定名称:第一个字符一定是反斜线(反斜线代表根空间), 然后再跟上命名空间,相当于绝对路径
echo \D盘\一级目录\file::FILENAME,'<hr>';
1.5 运行效果图
1.6 命名空间及类的别名
用关键字use给命名空间起别名,也可给命名空间中的类起别名
namespace newdir;
// 给命名空间起别名
// 语法:use 命名空间名称 as 别名
use D盘 as d;
echo d\file::FILENAME,'<hr>';
// 给命名空间+类起别名
// 语法:use 命名空间名称+类名称 as 别名
use D盘\一级目录\file as onefile;
echo onefile::FILENAME,'<hr>';
// 如果别名与类名相同,可省略as关键字及别名
// 语法:use 命名空间名称+类名称
use D盘\一级目录\二级目录\file;
echo file::FILENAME,'<hr>';
命名空间和类别名 主要应用于简化命名空间较多且路径较长的类名称,可将命名空间和文件所在路径一一对应,类名和文件名一一对应,实现自动加载类文件
2.类文件的自动加载
2.1实现原理:
(1)将带命名空间的类名称中的反斜线替换为系统目录分割符
(2)拼接出要加载的类文件绝对路径
(3)用require加载这个类文件
(4)用use简化类名称,使用简化后的类名称访问类方法
2.2代码示例
// 获取到带命名空间的类名称
$className = 'inc\lib\functionclass';
//1.将带命名空间的类名称中的反斜线替换为系统目录分割符
$path = str_replace('\\', DIRECTORY_SEPARATOR, $className);
// 2.拼接出要加载的类文件绝对路径
$file = __DIR__ . DIRECTORY_SEPARATOR . $path . '.php';
// 3.用require加载这个类文件
require $file;
// 4.用use简化类名称,使用简化后的类名称访问类方法
use inc\lib\functionclass;
echo functionclass::myfunction();