core\MyFrame.PHP
<?PHP
namespace core;
class MyFrame
{
public static $classMap = [];
static function run()
{
p('ok');
$route = new \core\Route();
}
static function load($class)
{
if(isset(self::$classMap[$class])) {
return true;
} else {
$file = MYFRAME.'/'.str_replace('\\','/',$class).'.PHP';
if (is_file($file)) {
require_once $file;
self::$classMap[$class] = $class;
} else {
return false;
}
}
}
}
上面代码中,load()
方法的主要功能就是自动加载类库。
自动加载的工作原理:
当我们new一个类的时候,如果它不存在,就会触发spl_autoload_register
注册的方法,然后通过这个方法去引入要实例化的类
spl_autoload_register('\core\MyFrame::load');
<?PHP
/*
* 入口文件
* 1.定义常量
* 2.加载函数库
* 3.启动框架
*/
//定义框架根目录
define('MYFRAME',__DIR__);
//定义框架核心目录
define('CORE',MYFRAME.'/core');
//定义应用目录
define('APP',MYFRAME.'/app');
//定义是否开启调试模式
define('DEBUG',1);
if (DEBUG) {
ini_set("display_errors", "On");
} else {
ini_set('display_errors','Off');
}
//引入框架核心函数库
include_once CORE.'/common/functions.PHP';
//引入框架核心类库
include_once CORE.'/MyFrame.PHP';
//注册自动加载类
spl_autoload_register("\\core\\MyFrame::load");
//运行框架
\core\Myframe::run();
所以,我们在run
方法实例化route类的时候并没有手动引入该类文件
static public function run()
{
p('ok');
$route = new \core\route();
}
上面代码,new \core\route()
会触发load()
方法,然后去引入需要的文件。
<?PHP
namespace core;
class Route
{
public function __construct(){
p('route ok');
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。