实现自动加载,应该遵循如下约定:
- 一个文件只有一个类
- 类名和文件名必须一致
- 类的命名空间,必须映射到类文件所在的路径
use
默认必须是”完全限定名称”,所以"\"
全局空间标识符可以不写
根据系统不同,实现目录分隔符的转换$path = str_replace('\\', DIRECTORY_SEPARATOR, $class);
require __DIR__ . DIRECTORY_SEPARATOR. $class.'.php';
结构目录
Index.php代码
<?php
namespace index;
// 引入自动加载
require 'auto.php';
use inc\con1;
use inc\con2;
use inc\con3;
echo con1::index() . '<hr>';
echo con2::index() . '<hr>';
echo con3::index() . '<hr>';
Auto.php代码
<?php
// 自动加载
spl_autoload_register(function ($class) {
$dir = str_replace('\\', DIRECTORY_SEPARATOR, $class);
require __DIR__ . DIRECTORY_SEPARATOR . $dir . '.php';
});
Inc/con1.php代码
<?php
namespace inc;
class con1
{
public static function index()
{
return __CLASS__ . '类<br>' . __METHOD__ . '方法';
}
}
Inc/con2.php代码
<?php
namespace inc;
class con2
{
public static function index()
{
return __CLASS__ . '类<br>' . __METHOD__ . '方法';
}
}
Inc/con3.php代码
<?php
namespace inc;
class con3
{
public static function index()
{
return __CLASS__ . '类<br>' . __METHOD__ . '方法';
}
}