在实际开发中,不论是使用laravel、thinkphp、yii等,还是自己搭建MVC框架,都会使用到自动加载类的情况,都会使用到namespace + spl_autoload_register()来引用类库,避免使用require/include来加载类库。
本例将使用namespace + spl_autoload_register()自动加载自定义类,首先必须遵守:
1、类文件全部使用命名空间
2、所有php文件必须自动加载,不许使用require/include
3、单一入口
开始实例:
1、目录结构(注意层级关系)
App\Controller\Home\Index.php文件
<?php
namespace App\Controller\Home;
class Index
{
static function test(){
echo __DIR__."<br>";
}
}
Imooc\Loader.php文件
<?php
namespace Imooc;
class Loader
{
public static function autoload($class)
{
require BASEDIR.'/'.str_replace("\\",'/',$class).'.php';
}
}
Imooc\Obj.php
<?php
namespace Imooc;
class Obj
{
static function test(){
echo __DIR__."<br>";
}
}
index.php(入口文件)
<?php
define("BASEDIR",__DIR__);
require BASEDIR.'/Imooc/loader.php';
spl_autoload_register('Imooc\Loader::autoload');
Imooc\Obj::test();
App\Controller\Home\Index::test();
运行截图:
任务结束