PHP自己的框架实现function引入和dump函数(完善篇一)

1、实现效果

2、创建三个function.php

3、文件加载(KJ.php)

定义目录

php 复制代码
    define("FILE_PATH",KJ_CORE.'/file'); //定义框架文件路径
    define("COMMON_PATH",ROOT_PATH.'/common'); //定义公共目录

加载文件

php 复制代码
    public static function run(){
        //定义常量
        self::_set_const();
        //创建模块目录
        self::_mk_module();
        //加载文件
        self::_import_file();
        //类自动加载
        spl_autoload_register(array(__CLASS__,'_autoload'));
        //运行框架
        self::_run();
    }
    //加载文件
    private static function _import_file(){
        $fileArr=array(
            FILE_PATH.'/function.php',
            COMMON_PATH.'/function.php',
            MODULE_PATH.'/function.php',
        );
        foreach ($fileArr as $v){

            if(is_file($v)){
                require_once  $v;
            }
        }
    }

4、dump方法实现,file下面function.php

php 复制代码
<?php
function dump($arr){
  if(is_bool($arr)){
      var_dump($arr);
  }else if(is_null($arr)){
      var_dump(NULL);
  }else{
      echo '<pre style="padding: 10px;border-radius: 5px;background: #f5f5f5;border:1px solid #ccc;font-size: 14px;">'.print_r($arr,true).'</pre>';
  }
}

5、框架iindexCrl.php调用dump

php 复制代码
<?php
class indexCrl extends  CrlBase {
    public function index(){
       $arr=['a'=>1,'b'=>2];
       dump($arr);
    }
}

6、完整KJ.php

php 复制代码
<?php

final class KJ{
    public static function run(){
        //定义常量
        self::_set_const();
        //创建模块目录
        self::_mk_module();
        //加载文件
        self::_import_file();
        //类自动加载
        spl_autoload_register(array(__CLASS__,'_autoload'));
        //运行框架
        self::_run();
    }
    //加载文件
    private static function _import_file(){
        $fileArr=array(
            FILE_PATH.'/function.php',
            COMMON_PATH.'/function.php',
            MODULE_PATH.'/function.php',
        );
        foreach ($fileArr as $v){

            if(is_file($v)){
                require_once  $v;
            }
        }
    }

    //运行控制器中方法
    public static function _run(){
        $c=strtolower(isset($_GET['c'])?$_GET['c']:'index');
        $a=strtolower(isset($_GET['a'])?$_GET['a']:'index');
        define('CRL',$c);  //当前控制器
        define('ACTION',$a);//当前方法
        $c.='Crl';
        if(!class_exists($c)){
            die("控制器".$c."不存在");
        }

        $obj=new $c();
        if(!method_exists($obj,$a)){
            die("控制器".$c."下".$a."方法不存在");
        }
        $obj->$a();
    }
    //自动加载文件
    public static function _autoload($className){

        switch ($className){
            //自动model类
            case substr($className,-5)=='Model':
                $path= MODEL.'/'.$className.'.php';
                if(is_file($path))  include $path;
                break;
            //自动加载控制器
            case substr($className,-3)=='Crl':
                $path= CONTROLLER.'/'.$className.'.php';
                if(is_file($path))  include $path;
                break;
            //自动加载基类
            case substr($className,-4)=='Base':
                $path= KJ_CORE.'/base/'.$className.'.php';
                if(is_file($path))  include $path;
                break;
            default :
                break;
        }
    }


    //定义常量
    public static function _set_const(){
        //获取框架核心路径 都替换/以便兼容linux
        $path=str_replace('\\','//',__FILE__);
        //定义常量
        define("KJ_CORE",dirname($path)); //框架核心路径
        define('ROOT_PATH',dirname(KJ_CORE));//项目根目录
        define('MODULE_PATH',ROOT_PATH.'/'.MODULE);//模块

        define('CONTROLLER',MODULE_PATH.'/controller');//定义控制器
        define('MODEL',MODULE_PATH.'/model');//定义模型
        define('VIEW',MODULE_PATH.'/view');//定义显示

        define('EXTEND',KJ_CORE.'/extend');//定义扩建路径
        define('CACHE',ROOT_PATH.'/cache');//定义缓存路径
        //模板编译目录
        define('APP_COMPILE_PATH',CACHE.'/view/'.MODULE.'/Compile');
        //模板缓存
        define('APP_CACHE_PATH',CACHE.'/view/'.MODULE.'/Cache');

        define("FILE_PATH",KJ_CORE.'/file'); //定义框架文件路径
        define("COMMON_PATH",ROOT_PATH.'/common'); //定义公共目录
    }
    //自动创建模块目录
    public static function _mk_module(){
        $arr=[
            MODULE_PATH,
            CONTROLLER,
            MODEL,
            VIEW,
        ];
        foreach ($arr as $v){
            is_dir($v) || mkdir($v,0777,true);
        }
    }

}
KJ::run();
相关推荐
眼不痛请看我22 分钟前
Ubuntu_22.04_LTS虚拟机安装指南
linux·数据库·ubuntu
Omics Pro30 分钟前
强生:以机理为中心!虚拟细胞世界模型
数据库·人工智能·python·深度学习·算法·机器学习·自然语言处理
czq_268671948738 分钟前
Python打卡第34天
开发语言·python·机器学习
java资料站1 小时前
四、Spring AIAlibaba · Tools(工具调用)
数据库·sql·spring
步行cgn1 小时前
Spring 事务传播行为详解
java·数据库·spring
论文复现现场1 小时前
8卡 A100 服务器哪里租?NVLink、RDMA 与 NCCL 验收指南
linux·服务器·php·分布式训练·rdma·nvlink·nccl
小黄人软件1 小时前
粘贴助手C++版 支持 Windows 7 / 10 / 11 不会出现缺少api-ms-win-core-path-11-1-0.dll
开发语言·c++·windows
半亩码田1 小时前
C#转Python第4.7篇:logging:Python 的标准日志库
开发语言·python·c#
程序员老陆1 小时前
从汇编层面理解 C++ 多线程
开发语言·c++·程序设计
anxiao_m1 小时前
跨地域大文件怎么传?2026主流传输软件实测对比
大数据·数据库·文件传输