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

news2024/11/28 22:44:52

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

 

 2、创建控制器indexCrl.php

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

 3、KJ.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框架运行控制器中方法

 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

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();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/858032.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows下运行Tomcat服务时报GC Overhead Limit Exceeded

根本原因是在新建Tomcat作为Windows服务时&#xff0c;系统默认设置的堆内存太小了&#xff0c;我们打开/bin/service.bat文件&#xff0c;将如下图所示的默认值改大一些就好了 if "%JvmMs%" "" set JvmMs512 if "%JvmMx%" "" set J…

嵌入式AI芯片架构用处

Blaize将其GSP描述为能够执行“直接图处理&#xff0c;片上任务图管理和执行以及任务并行性”。简而言之&#xff0c;Blaize设计了GSP来满足AI&#xff0c;GPU&#xff0c;CPU或DSP以前无法满足的处理需求。 对于许多涉及嵌入式ai处理器的行业分析师而言&#xff0c;这是他们之…

算法通关村——轻松搞定最大深度问题

前言 二叉树的深度&#xff1a;从根节点到当前节点的最长简单路径边的条数 题目 给定一个二叉树&#xff0c;找出其最大深度&#xff0c;二叉树的深度为根节点到最远叶子节点的最长路径上的节点数 说明 如下图所示&#xff0c;对于node(3) &#xff0c; 最大深度自然是左右子节…

pmp考试是智商税吗,是一场持久的割韭菜战吗?

在一些大型企业中&#xff0c;PMP认证已成为担任“项目经理”必备的资格之一。此外&#xff0c;在国际上&#xff0c;PMP认证也成为参与项目招标的必要条件之一&#xff0c;只有拥有PMP认证的项目经理所在的公司才有资格参与竞标&#xff0c;而承建项目经理也必须持有PMP认证。…

RabbitMQ 安装教程

RabbitMQ 安装教程 特殊说明 因为RabbitMQ基于Erlang开发&#xff0c;所以安装时需要先安装Erlang RabbitMQ和Erlang版本对应关系 查看地址&#xff1a;www.rabbitmq.com/which-erlan… 环境选择 Erlang: 23.3及以上 RabbitMQ: 3.10.1Windows 安装 1. 安装Erlang 下载地…

海外进出口跨境电商独立站开发(多语言+多货币)

要搭建一个海外进出口跨境电商独立站开发&#xff0c;需要考虑以下几个方面&#xff08;以下步骤不分先后&#xff09;&#xff1a; 设计系统架构在开始编写代码之前&#xff0c;首先需要设计系统的整体架构。对于一个大型的电商系统&#xff0c;需要考虑系统可扩展性、高可用…

NameError: No such file or directory 解决方法

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 问题 最近有小伙伴经常问到这个报错&#xff0c;今天来分享一下具体怎么解决。 [Errno 2] No such file or directory: ./mnist_image_label/mnist_train_jpg_60000.txt这个没有查找到子文件或者子文件夹的问题 解决…

CPU与硬件的交互方式(中断、轮询)

CPU与硬件的交互方式 轮询方式&#xff1a;CPU不断的访问硬件有没有进行操作&#xff0c;如果接收到了信息&#xff0c;CPU就处理。如果没有过一会在访问一遍 直到有信息为止 中断方式&#xff1a;硬件操作的时候会写一个中断&#xff0c;向CPU发送这个中断&#xff0c;CPU正常…

【LeetCode】练习习题集【4月 - 7 月】

LEETCODE习题集【4月-7月总结】 简单 数组部分 1.重复数 题目&#xff1a; 在一个长度u为 n 的数组 nums 里的所有数字都在 0&#xff5e;n-1 的范围内。数组中某些数字是重复的&#xff0c;但不知道有几个数字重复了&#xff0c;也不知道每个数字重复了几次。请找出数组中…

网络安全—黑客技术【自学】

一、黑客是什么 原是指热心于计算机技术&#xff0c;水平高超的电脑专家&#xff0c;尤其是程序设计人员。但后来&#xff0c;黑客一词已被用于泛指那些专门利用电脑网络搞破坏或者恶作剧的家伙。 二、学习黑客技术的原因 其实&#xff0c;网络信息空间安全已经成为海陆空之…

Linux驱动——input子系统

一、input子系统基本框架 Linux内核为了两个目的&#xff1a; 简化纯输入类外设&#xff08;如&#xff1a;键盘、鼠标、游戏杆、轨迹球、触摸屏。。。等等&#xff09;的驱动开发 统一输入类外设产生的数据格式&#xff08;struct input_event&#xff09;&#xff0c;更加方…

将你的计算机变身为果园守护者:与本地树莓派建立连结的乐趣探索!!

如何连接本地树莓派 文章目录 如何连接本地树莓派前言1. 操作流程2. 打开树莓派SSH功能3. 确认树莓派信息后 安装相应SSH客户端 &#x1f341; 小结 &#x1f341; 前言 树莓派作为一款以教育为目的推出的硬件系统&#xff0c;也是超低功耗的微型“准系统”&#xff0c;能够提…

Redis的RDB持久化

Redis是一个键值对数据库服务器&#xff0c;服务器中通常包含着任意个非空数据库&#xff0c;而每个非空数据库中又可以包含任意个键值对&#xff0c;为了方便起见&#xff0c;我们将服务器中的非空数据库以及它们的键值对统称为数据库状态。 举个例子&#xff0c;下图展示了一…

模仿学习(行为克隆,逆强化学习,生成式对抗模仿学习)

目录 1.模仿学习 1.1先说强化学习 1.2再说逆强化学习 1.3最后说生成对抗模仿学习 1.3.1先说GAN 1.3.2再说生成对抗模仿学习 1.4逆强化学习常用方法 参考文献 1.模仿学习 定义&#xff1a;当我们想训练机器人时&#xff0c;通过复制人类的动作&#xff0c;对机器人进行训…

ssm新生报到系统源码和论文PPT

ssm新生报到系统源码和论文PPT004 开发环境 开发工具&#xff1a;idea 数据库mysql5.7(mysql5.7最佳) 数据库链接工具&#xff1a;navcat,小海豚等 开发技术&#xff1a;java ssm tomcat8.5 选题依据及意义 每学年九月份随着新生的入校&#xff0c;学校工作中的重点都会集…

Endnote中导入和显示中文文献国标格式具体实现步骤

Endnote中导入和显示中文文献国标格式具体实现步骤 目录 Endnote中导入和显示中文文献国标格式具体实现步骤一、下载中文文献引用标准格式二、将下载的两种格式复制到Endnote安装文件下的Styles子文件夹中三、对导入的样式进行标记&#xff0c;以便在word中方便显示和使用四、在…

领航优配:美联储货币政策风向或已生变 私行纵论下半年黄金配置价值

美联储钱银方针风向或已生变&#xff0c;黄金的拥趸开端跃跃欲试。 费城联储主席帕特里克哈克周二标明&#xff0c;美国有一条通往经济软着陆的路径&#xff0c;失业率或许有所上升&#xff0c;但起伏不会太大&#xff1b;不希望美联储过度收紧钱银方针&#xff0c;估计明年某时…

springBoot整合RabbitMq实现手动确认消息

如何保证消息的可靠性投递&#xff1f; 1.保证生产者向broke可靠性投递&#xff0c;开启ack投递成功确认&#xff0c;如果失败的话进行消息补偿 /*** author yueF_L* date 2023-08-10 01:32* ConfirmCallback&#xff1a;消息只要被 RabbitMQ broker 接收到就会触发confirm方…

OpenAI-Translator 实战总结

最近在极客时间学习《AI 大模型应用开发实战营》&#xff0c;自己一边跟着学一边开发了一个进阶版本的 OpenAI-Translator&#xff0c;在这里简单记录下开发过程和心得体会&#xff0c;供有兴趣的同学参考 功能概览 通过openai的chat API&#xff0c;实现一个pdf翻译器实现一个…

牛客小白月赛75C题题解

文章目录 方豆子问题建模问题分析代码 方豆子 问题建模 给定一个整数n&#xff0c;要求输出n级好豆豆&#xff0c;n级好豆豆由3个n-1级好豆豆和1个n-1级坏豆豆组成&#xff0c;已经给出了1级好豆豆和1级坏豆豆。 问题分析 由于最终的豆豆是由其上一级的豆豆产生的&#xff0…