PHP 利用spl_autoload_register实现自动加载
本文版权归作者(苦瓜糖水)所有,禁止转载至其他网站,以致污染搜索环境。
目录结构:
/autoload.php
/includes/ClassC.php
/includes/ClassB.php
/includes/ClassA.php
/includes/ClassA/ClassD.php
autoload.php文件内容:
<?php
header('Content-Type:text/html;charset=utf-8');
spl_autoload_register(function ($class) {
// 项目特定的命名空间前缀
$prefix = 'Kongjian';
// 命名空间前缀的根目录
$base_dir = __DIR__ . '/includes/';
// 判断该类是否使用命名空间前缀
$len = strlen($prefix);
if (strncmp($prefix, $class, $len) !== 0) return; // 跳转到下一个已注册的自动装载机
// 获取相应类名
$relative_class = substr($class, $len);
// 将名称空间前缀替换为基本目录,将命名空间分隔符替换为相对类名称中的目录分隔符,并附加.php
$file = $base_dir . str_replace('\\', '/', $relative_class) . '.php';
// 如果文件存在,则会引用它
if (file_exists($file)) require $file;
});
// 调用ABCD四个类的Output方法
Kongjian\ClassA::Output();
Kongjian\ClassB::Output();
Kongjian\ClassC::Output();
Kongjian\ClassA\ClassD::Output();
ClassA.php文件内容:
<?php
namespace Kongjian;
class ClassA
{
public static function Output()
{
echo '我是类A<hr>';
}
}
ClassB.php文件内容:
<?php
namespace Kongjian;
class ClassB
{
public static function Output()
{
echo '我是类B<hr>';
}
}
ClassC.php文件内容:
<?php
namespace Kongjian;
class ClassC
{
public static function Output()
{
echo '我是类C<hr>';
}
}
ClassD.php文件内容:
<?php
namespace Kongjian\ClassA;
class ClassD
{
public static function Output()
{
echo '我是类D<hr>';
}
}
输出效果: