当前位置:首页 > PHP教程 > php高级应用 > 列表

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继承类的时候,是不会自动加载父类的。

设置目录如下:

MVC框架类 PHP自动加载机制

实现自动加载功能相关的文件有:Loader.php,config.php,boot.php,index.php

config.php

  1. <?php 
  2. /** 
  3.  * Created by PhpStorm. 
  4.  * User: koastal 
  5.  * Date: 2016/5/15 
  6.  * Time: 10:48 
  7.  */ 
  8. define("APP_PATH",__DIR__."/.."); 
  9. define("Controller_PATH",__DIR__."/../controller"); 
  10. define("Model_PATH",__DIR__."/../model"); 
  11. define("View_PATH",__DIR__."/../view"); 

Loader.php

  1. <?php 
  2. /** 
  3.  * Created by PhpStorm. 
  4.  * User: koastal 
  5.  * Date: 2016/5/15 
  6.  * Time: 12:03 
  7.  */ 
  8. class Loader 
  9.   public static function baseLoad() 
  10.   { 
  11.     require_once("Controller.php"); 
  12.     require_once("Model.php"); 
  13.   } 
  14.   public static function autoload($class
  15.   { 
  16.     $path = $class.".class.php"
  17.     require_once($path); 
  18.   } 
  19. $include = array(Controller_PATH, Model_PATH,View_PATH); 
  20. set_include_path(get_include_path() . PATH_SEPARATOR .implode(PATH_SEPARATOR, $include)); 
  21. spl_autoload_register(array('Loader''autoload')); 
  22. Loader::baseLoad(); 

boot.php

  1. <?php 
  2. /** 
  3.  * Created by PhpStorm. 
  4.  * User: koastal 
  5.  * Date: 2016/5/15 
  6.  * Time: 12:19 
  7.  */ 
  8. require_once("Loader.php"); 

index.php

  1. <?php 
  2. require_once(__DIR__."/libs/config.php"); 
  3. require_once(__DIR__."/libs/boot.php"); 
  4. $obj = new testController(); 
  5. $obj->show(); 

经测试,以上代码可用,全文完。

加更

经测试上面的代码,在访问不存在的控制器是会报错,找不到相关类文件,因为我们缺少判断相关类文件是否存在,因此,我们对Loader.php进行优化,首先扫描相关类文件是否存在,如果不存在则报错。

  1. <?php 
  2. /** 
  3.  * Created by PhpStorm. 
  4.  * User: koastal 
  5.  * Date: 2016/5/15 
  6.  * Time: 12:03 
  7.  */ 
  8. require_once 'config.php'
  9. class Loader 
  10.   public static function baseLoad() 
  11.   { 
  12.     require_once("Controller.php"); 
  13.     require_once("Model.php"); 
  14.   } 
  15.   public static function searchFile($filename,$path
  16.   { 
  17.     $filePath = false; 
  18.     $list = scandir($path); 
  19.     foreach($list as $file){ 
  20.       $realPath = $path.DIRECTORY_SEPARATOR.$file
  21.       if(is_dir($realPath) && $file!='.' && $file!='..'){ 
  22.         $res = Loader::searchFile($filename,$realPath); 
  23.         if($res){ 
  24.           return $res
  25.         } 
  26.       }elseif($file!='.' && $file!='..'){ 
  27.         if($file == $filename){ 
  28.           $filePath = $realPath
  29.           break
  30.         } 
  31.       } 
  32.     } 
  33.     return $filePath
  34.   } 
  35.   public static function autoload($class
  36.   { 
  37.     $filename = $class.".class.php"
  38.     $cflag = Loader::searchFile($filename,Controller_PATH); 
  39.     $mfalg = Loader::searchFile($filename,Model_PATH); 
  40.     $path = false; 
  41.     $path = ($cflag != false)? $cflag:$path
  42.     $path = ($mfalg != false)? $mfalg:$path
  43.     if($path == false){ 
  44.       exit("Class Load Failed."); 
  45.     }else
  46.       require_once($path); 
  47.     } 
  48.   } 
  49. Loader::baseLoad(); 
  50. spl_autoload_register(array('Loader''autoload'));

Tags: MVC框架类 PHP自动加载机制

分享到:

相关文章