• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    PHP从零开始打造自己的MVC框架之类的自动加载实现方法详解

    本文实例讲述了PHP从零开始打造自己的MVC框架之类的自动加载实现方法。分享给大家供大家参考,具体如下:

    前面介绍了MVC框架的入口文件,接下来我们希望完成一个“自动加载类”的功能,我们把这个功能放到Imooc这个基础类当中。

    core\imooc.php:

    ?php
    namespace core;
    class Imooc
    {
      public static $classMap = array();
      static public function run()
      {
        p('ok');
        $route = new \core\route();
      }
      /*
      自动加载的功能
      */
      static public function load($class)
      {
        // 自动加载类库
        // new \core\Route()
        // $class = '\core\Route'
        // IMOOC.'/core/route.php'
        if(isset($classMap[$class])){
          return true;
        }else{
          $class = str_replace('\\', '/', $class);
          $file = IMOOC.'/'.$class.'.php';
          if (is_file($file)) {
            include $file;
            self::$classMap[$class] = $class;
          }else{
            return false;
          }
        }
      }
    }
    
    

    上面代码中,load()方法的主要功能就是自动加载类库。

    自动加载的工作原理:

    当我们new一个类的时候,如果它不存在,就会触发spl_autoload_register注册的方法,然后通过这个方法去引入要实例化的类

    spl_autoload_register('\core\Imooc::load');
    
    

    我们在入口文件index.php中注册:

    ?php
    /*
    入口文件
    1.定义常量
    2.加载函数库
    3.启动框架
    */
    // 定义当前框架所在的根目录
    define('IMOOC', __DIR__);
    // 定义框架核心文件所在的目录
    define('CORE', IMOOC.'/core');
    // 项目文件所在目录
    define('APP', IMOOC.'/app');
    // 定义项目调试模式
    define('DEBUG', true);
    // 判断项目是否处于调试状态
    if (DEBUG) {
      // 设置报错级别:显示所有错误
      ini_set('display_error', 'On');
    }else{
      ini_set('display_error','Off');
    }
    // 加载函数库
    include CORE.'/common/function.php';
    // 加载框架核心文件
    include CORE.'/imooc.php';
    // 注册自动加载
    // (当我们new一个不存在的类的时候会触发\core\Imooc::load)
    spl_autoload_register('\core\Imooc::load');
    \core\Imooc::run();
    
    

    所以,我们在run方法实例化route类的时候并没有手动引入该类文件

    static public function run()
    {
        p('ok');
        $route = new \core\route();
    }
    
    

    上面代码,new \core\route()会触发load()方法,然后去引入需要的文件。

    route.php代码如下:

    ?php
    namespace core;
    class Route
    {
      public function __construct(){
        p('route ok');
      }
    }
    
    

    现在我们访问入口文件index.php,会调用Imooc::run方法,预期浏览器会输出:

    ok
    route ok

    至此,项目结构如图:

    更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

    希望本文所述对大家PHP程序设计有所帮助。

    您可能感兴趣的文章:
    • PHP命名空间和自动加载类
    • PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
    • PHP实现的简单路由和类自动加载功能
    • PHP命名空间与自动加载类详解
    • 解析php类的注册与自动加载
    • php类自动加载器实现方法
    • PHP类的自动加载机制实现方法分析
    • php项目中类的自动加载实例讲解
    • PHP从零开始打造自己的MVC框架之路由类实现方法分析
    • PHP MVC框架中类的自动加载机制实例分析
    上一篇:PHP从零开始打造自己的MVC框架之入口文件实现方法详解
    下一篇:PHP从零开始打造自己的MVC框架之路由类实现方法分析
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    PHP从零开始打造自己的MVC框架之类的自动加载实现方法详解 PHP,从,零,开始,打造,自己的,