CI框架 获取所有方法

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class ControllerList {


    private $CI;

    /**
     * 包含控制器名称和方法
     */
    private $aControllers;

    // Construct
    function __construct() {
        $this->CI = get_instance();

        $this->setControllers();
    }

    /**
     * 返回所有控制器及其方法
     * @return array
     */
    public function getControllers() {
        return $this->aControllers;
    }

    /**
     * 设置包含控制器名称和方法的数组
     */
    public function setControllerMethods($p_sControllerName, $p_aControllerMethods) {
        $this->aControllers[$p_sControllerName] = $p_aControllerMethods;
    }

    /**
     * 设置控制器和方法。
     */
    private function setControllers() {
        // 遍历控制器目录
        foreach(glob(APPPATH . 'controllers/*') as $controller) {

            // 如果循环中的值是通过该目录的目录循环
            if(is_dir($controller)) {
                // 获取目录名称
                $dirname = basename($controller, EXT);

                // 遍历子目录
                foreach(glob(APPPATH . 'controllers/'.$dirname.'/*') as $subdircontroller) {
                    // 获取子目录的名称
                    $subdircontrollername = basename($subdircontroller, EXT);

                    // 如果尚未加载控制器文件,请将该文件加载到内存中
                    if(!class_exists($subdircontrollername)) {
                        $this->CI->load->file($subdircontroller);
                    }
                    //使用其方法将controllername添加到数组
                    $aMethods = get_class_methods($subdircontrollername);
                    $aUserMethods = array();
                    foreach($aMethods as $method) {
                        if($method != '__construct' && $method != 'get_instance' && $method != $subdircontrollername) {
                            $aUserMethods[] = $method;
                        }
                    }
                    $this->setControllerMethods($subdircontrollername, $aUserMethods);
                }
            }
            else if(pathinfo($controller, PATHINFO_EXTENSION) == "php"){

                $controllername = basename($controller, EXT);
                // 如果尚未加载控制器文件,请将该文件加载到内存中
                if(!class_exists($controllername)) {
                    $this->CI->load->file($controller);
                }

                $aMethods = get_class_methods($controllername);
                $aUserMethods = array();
                if(is_array($aMethods)){
                    foreach($aMethods as $method) {
                        if($method != '__construct' && $method != 'get_instance' && $method != $controllername) {
                            $aUserMethods[] = $method;
                        }
                    }
                }

                $this->setControllerMethods($controllername, $aUserMethods);
            }
        }
    }
}

  

posted @ 2020-04-08 16:56  夕余丶敲敲  阅读(326)  评论(0编辑  收藏  举报