PHP最简单自定义自己的框架控制器自动加载运行(四)

1、实现效果调用控制中方法

2、创建控制器indexCrl.php

php 复制代码
<?php
class indexCrl{
     public function index(){
        echo '当前index控制器index方法';
     }
}

3、KJ.php字段加载控制器文件

php 复制代码
    public static function run(){
        //定义常量
        self::_set_const();
        //创建模块目录
        self::_mk_module();
        //类自动加载
        spl_autoload_register(array(__CLASS__,'_autoload'));
    }
    //自动加载文件
    public static function _autoload($className){
        switch ($className){
            //自动加载控制器
            case substr($className,-3)=='Crl':
                $path= CONTROLLER.'/'.$className.'.php';
                if(is_file($path))  include $path;
                break;
            default :

                break;
        }
    }

4、KJ.php框架运行控制器中方法

php 复制代码
 public static function run(){
        //定义常量
        self::_set_const();
        //创建模块目录
        self::_mk_module();
        //类自动加载
        spl_autoload_register(array(__CLASS__,'_autoload'));
        //运行框架
        self::_run();
    }
    //运行控制器中方法
    public static function _run(){
        $c=strtolower(isset($_GET['c'])?$_GET['c']:'index');
        $a=strtolower(isset($_GET['a'])?$_GET['a']:'index');
        $c.='Crl';
        if(!class_exists($c)){
            die("控制器".$c."不存在");
        }

        $obj=new $c();
        if(!method_exists($obj,$a)){
            die("控制器".$c."下".$a."方法不存在");
        }
        $obj->$a();
    }

5、完整KJ.php代码

php 复制代码
<?php

final class KJ{
    public static function run(){
        //定义常量
        self::_set_const();
        //创建模块目录
        self::_mk_module();
        //类自动加载
        spl_autoload_register(array(__CLASS__,'_autoload'));
        //运行框架
        self::_run();
    }
    //运行控制器中方法
    public static function _run(){
        $c=strtolower(isset($_GET['c'])?$_GET['c']:'index');
        $a=strtolower(isset($_GET['a'])?$_GET['a']:'index');
        $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){
            //自动加载控制器
            case substr($className,-3)=='Crl':
                $path= CONTROLLER.'/'.$className.'.php';
                if(is_file($path))  include $path;
                break;
            default :

                break;
        }
    }


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

        define('CONTROLLER',MODULE_PATH.'/controller');//定义控制器
        define('MODEL',MODULE_PATH.'/model');//定义模型
        define('VIEW',MODULE_PATH.'/view');//定义显示成
    }
    //自动创建模块目录
    public static function _mk_module(){
        $arr=[
            MODULE_PATH,
            CONTROLLER,
            MODEL,
            VIEW,
        ];
        foreach ($arr as $v){
            is_dir($v) || mkdir($v,0777,true);
        }
    }

}
KJ::run();
相关推荐
兰亭妙微UI设计公司4 分钟前
兰亭妙微软件界面设计公司的解锁按钮设计10大密码
开发语言·前端·javascript
人邮异步社区10 分钟前
C语言好学,还是Python好学?
c语言·开发语言·python
栈帧之外27 分钟前
【C++】红黑树实现
开发语言·c++
程序员老陆29 分钟前
C++中同一个回调函数被多个设备并发调用:并发问题不在“函数”,而在“状态”
开发语言·c++·程序设计
wangchunyu11432 分钟前
JDK8新特性实战(Lambda、Stream、Optional)
java·开发语言
鱼宵36 分钟前
工厂模式实战:消灭魔法数字,把写死的 new 收进一个厂里
开发语言·python
sbjdhjd41 分钟前
从 preg_replace 规则到缓存绕过:一次授权 PHP 防护实验中的图片载荷、回调检测与哈希碰撞复盘
网络安全·数据挖掘·php·文件包含·宝塔·哈希·火绒
niucloud-admin1 小时前
NIUCLOUD LITE AI开发文档--后台系统结构
开发语言
青企通1 小时前
传统企业数字化转型的技术路径:从需求建模到小程序 MVP 的落地方法
小程序·php·apache
一支蜉蝣1 小时前
Day25 XD安全笔记 安全开发-PHP 应用&文件管理模块&包含&上传&遍历&写入&删除&下载&安全
笔记·网络安全·php