首页 > 其他 > 详细

框架原理之自动加载(二)

时间:2020-03-11 19:10:41      阅读:53      评论:0      收藏:0      [点我收藏+]

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‘);
    }
}

框架原理之自动加载(二)

原文:https://www.cnblogs.com/xiaobingch/p/12464579.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!