一步一步重写 CodeIgniter 框架 (11) —— 使用 CodeIgniter 函数库

在完成了CI框架的类库扩展后,很天然咱们就会想到函数库的扩展。函数库的扩展在 CI 中称为 helper php

函数与类有不一样的地方,它不能继承,只能覆盖或者添加新的函数,或者直接彻底新定义的一组函数。框架

因为扩展的方式与以前很是相似,下面直接用代码进行介绍函数

/**
     * Loader Helper
     *
     * This function loads the specified helper file.
     *
     * @param  mixed
     * @return void
     */
    public function helper($helpers = array()) {

        foreach ($this->_ci_prep_filename($helpers, '_helper') as $helper) {

            if ( isset($this->_ci_helpers[$helper])) {
                continue;
            }

            $ext_helper = APPPATH.'helpers/'.config_item('subclass_prefix').$helper.'.php';

            // 是不是个扩展
            if (file_exists($ext_helper)) {
                $base_helper = BASEPATH.'helpers/'.$helper.'.php';
                if ( ! file_exists($base_helper)) {
                    show_error('Unable to load the requested file: helpers/'.$helper.'.php');
                }

                include_once($ext_helper);
                include_once($base_helper);

                $this->_ci_helpers[$helper] = TRUE;
                log_message('debug', 'Helper loaded: '.$helper);
            }

            foreach ($this->_ci_helper_paths as $path) {
                if (file_exists($path.'helpers/'.$helper.'.php')) {
                    include_once($path.'helpers/'.$helper.'.php');

                    $this->_ci_helpers[$helper] = TRUE;
                    log_message('debug', 'Helper loaded: '.$helper);
                    break;
                }
            }

            // unable to load the helper
            if ( ! isset($this->_ci_helpers[$helper])) {
                show_error('Unable to load the requested file: helpers/'.$helper.'.php');
            }

        }

    }

上面的代码较为简单,this

1)首先对加载的 helper 文件名进行预处理;spa

2) 而后判断是否存在“扩展”函数库, 存在的话则一块儿加载原始 函数库 和 扩展函数库;debug

3) 不然的话,只须要加载须要的文件就能够了,按照指定的路径顺序去搜索。code

其中辅助函数 _ci_prep_filename 以下blog

function _ci_prep_filename($filename, $extension) {
        if ( ! is_array($filename)) {
            return array(strtolower(str_replace('.php', '', str_replace($extension, '', $filename)).$extension));
        } else {
            foreach ($filename as $key => $val) {
                $filename[$key] = strtolower(str_replace('.php', '', str_replace($extension, '', $filename)).$extension);
            }
            return $filename;
        }
    }
相关文章
相关标签/搜索