PHP MVC框架中类的自动加载机制实例分析
发布:smiling 来源: PHP粉丝网 添加日期:2021-12-19 11:31:57 浏览: 评论:0
这篇文章主要介绍了PHP MVC框架中类的自动加载机制,结合实例形式分析了MVC框架中类的自动加载机制原理、实现方法及相关操作注意事项,需要的朋友可以参考下。
本文实例讲述了PHP MVC框架中类的自动加载机制,分享给大家供大家参考,具体如下:
原文
实现类的自动加载主要使用到了set_include_path和spl_autoload_register函数。
set_include_path用于提前设置好可能会加载的类的路径。
spl_autoload_register用于调用相关自动加载所需类的函数,实现自动载入的功能。
有一点要注意的是:自动加载在实例化类的时候执行,也就是说使用extends继承类的时候,是不会自动加载父类的。
设置目录如下:
实现自动加载功能相关的文件有:Loader.php,config.php,boot.php,index.php
config.php
- <?php
- /**
- * Created by PhpStorm.
- * User: koastal
- * Date: 2016/5/15
- * Time: 10:48
- */
- define("APP_PATH",__DIR__."/..");
- define("Controller_PATH",__DIR__."/../controller");
- define("Model_PATH",__DIR__."/../model");
- define("View_PATH",__DIR__."/../view");
Loader.php
- <?php
- /**
- * Created by PhpStorm.
- * User: koastal
- * Date: 2016/5/15
- * Time: 12:03
- */
- class Loader
- {
- public static function baseLoad()
- {
- require_once("Controller.php");
- require_once("Model.php");
- }
- public static function autoload($class)
- {
- $path = $class.".class.php";
- require_once($path);
- }
- }
- $include = array(Controller_PATH, Model_PATH,View_PATH);
- set_include_path(get_include_path() . PATH_SEPARATOR .implode(PATH_SEPARATOR, $include));
- spl_autoload_register(array('Loader', 'autoload'));
- Loader::baseLoad();
boot.php
- <?php
- /**
- * Created by PhpStorm.
- * User: koastal
- * Date: 2016/5/15
- * Time: 12:19
- */
- require_once("Loader.php");
index.php
- <?php
- require_once(__DIR__."/libs/config.php");
- require_once(__DIR__."/libs/boot.php");
- $obj = new testController();
- $obj->show();
经测试,以上代码可用,全文完。
加更
经测试上面的代码,在访问不存在的控制器是会报错,找不到相关类文件,因为我们缺少判断相关类文件是否存在,因此,我们对Loader.php进行优化,首先扫描相关类文件是否存在,如果不存在则报错。
- <?php
- /**
- * Created by PhpStorm.
- * User: koastal
- * Date: 2016/5/15
- * Time: 12:03
- */
- require_once 'config.php';
- class Loader
- {
- public static function baseLoad()
- {
- require_once("Controller.php");
- require_once("Model.php");
- }
- public static function searchFile($filename,$path)
- {
- $filePath = false;
- $list = scandir($path);
- foreach($list as $file){
- $realPath = $path.DIRECTORY_SEPARATOR.$file;
- if(is_dir($realPath) && $file!='.' && $file!='..'){
- $res = Loader::searchFile($filename,$realPath);
- if($res){
- return $res;
- }
- }elseif($file!='.' && $file!='..'){
- if($file == $filename){
- $filePath = $realPath;
- break;
- }
- }
- }
- return $filePath;
- }
- public static function autoload($class)
- {
- $filename = $class.".class.php";
- $cflag = Loader::searchFile($filename,Controller_PATH);
- $mfalg = Loader::searchFile($filename,Model_PATH);
- $path = false;
- $path = ($cflag != false)? $cflag:$path;
- $path = ($mfalg != false)? $mfalg:$path;
- if($path == false){
- exit("Class Load Failed.");
- }else{
- require_once($path);
- }
- }
- }
- Loader::baseLoad();
- spl_autoload_register(array('Loader', 'autoload'));
Tags: MVC框架类 PHP自动加载机制
相关文章
- ·PHP自动加载机制实例详解(2021-10-05)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)