框架原理之自动加载(二)
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');
我们在入口文件index.php
中注册:
<?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()
方法,然后去引入需要的文件。
core\route.php
代码如下:
<?php namespace core; class Route { public function __construct(){ p('route ok'); } }
分类:
编程语言
标签:
MoonsbirdBlog
, PHP
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)