ThinkPHP---thinkphp文件加载

【一】文件加载在ThinkPHP里提供了三种方式

实际开发里,文件加载方式一般以第一种为主(通过函数库形式自动加载,此时我们仅仅需要定义文件和函数)

(1)函数库形式加载

函数库分3种级别,系统函数库文件(ThinkPHP/Common/functions.php)、应用函数库文件(默认不存在,需自己创建)、分组 / 平台函数库文件(默认不存在,自己创建)

上述三个函数库文件只有系统函数库文件名为functions.php,其他两个叫function.php

案例:使用函数库形式定义需要的函数,函数名gnk2utf8。这里我放到了应用级别目录下Application/Common/Common/function.php

<?php
    function gbk2utf8(){
        echo 'gbk2utf8';
    }
?>

定义好的函数库文件的函数,使用时遵循PHP内置函数语法要求,不用引入自定义的应用函数库文件,只要直接写上函数名(参数)。

这里我在控制器直接使用

//调取函数库文件
        public function test11(){
            gbk2utf8();//直接调用,访问时会输出gbk2utf8
        }

注意:①不需要引入函数库文件function.php;②如果函数定义在应用级别函数库文件,则可以在全部分组使用;若只定义在分组里,则只能在当前分组用,否则会报错

(2)通过配置项动态加载

在系统执行流程中文件ThinkPHP/Library/App.class.php(ThinkPHP 应用程序类 执行应用过程管理)会被执行到,

/**
     * 应用程序初始化
     * @access public
     * @return void
     */
    static public function init() {
        // 加载动态应用公共文件和配置
        load_ext_file(COMMON_PATH);//COMMON_PATH指应用级别的函数库文件目录,Common目录
}

查询后方法load_exit_file为自定义函数,所以去系统函数库functions.php里去寻找

/**
 * 加载动态扩展文件
 * @var string $path 文件路径
 * @return void
 */
function load_ext_file($path) {
    // 加载自定义外部文件
    if($files = C('LOAD_EXT_FILE')) {
//C方法:系统函数库文件里定义的快速方法,作用是操作ThinkPHP的配置项。具体在下面说道
$files = explode(',',$files); foreach ($files as $file){ $file = $path.'Common/'.$file.'.php';//拼接后找到应用级别函数库目录下函数文件 if(is_file($file)) include $file; } } // 加载自定义的动态配置文件 if($configs = C('LOAD_EXT_CONFIG')) { if(is_string($configs)) $configs = explode(',',$configs); foreach ($configs as $key=>$config){ $file = is_file($config)? $config : $path.'Conf/'.$config.CONF_EXT; if(is_file($file)) { is_numeric($key)?C(load_config($file)):C($key,load_config($file)); } } } }

拓展:C方法

C(name,value)         设置配置项name的值,值为value

C(name)                  读取指定配置项name的值

C()                           读取全部配置项

通过以上代码的阅读,可以发现配置项LOAD_EXT_FILE的配置格式应该类似于如下格式

LOAD_EXT_FILES => 'abc,ede,...',且文件应该位于应用目录下的Common的Common目录。

配置项LOAD_EXT_FILES放到应用级别配置文件(Application/Common/Conf/config.php)下,不用写php后缀,

//动态加载文件
 'LOAD_EXT_FILE'     =>   'info',//包含文件名的字符串,多个文件名之间只有英文半角,分隔

之后在函数库文件里定义函数库info.php文件

<?php
    function getInfo(){
        phpinfo();
    }
?>

接下来控制器调用自定义方法

//测试load_ext_file引入
        public function test(){
            //使用函数
            getInfo();//输出成功
        }

上述需要注意的是:文件在系统封装的方法里进行了引入,所以在使用具体函数的时候不需要再对文件进行单独的引入。只需要像使用函数库文件的形式直接编写需要传递的函数名

即传递相应参数即可。

(3)通过load方法加载

语法:load('@/不带后缀的php文件名')

注意:文件必须存储在分组级别的函数库目录中,且只能用于定义的分组里

案例:自己在分组目录中创建文件hello.php,然后在其中定义一个函数。之后使用load方法加载并使用其中的函数。

①分组目录下创建函数库文件Application/Admin/Common/hello.php

②编写函数

<?php
    function sayhellow($who){
        echo 'hello,'.$who;
    }
?>

③控制器里使用load方法加载hello.php文件,并调取方法

public function test(){
            //load方法载入文件
            load('@/hello');
            //载入完成后调用方法,传参Tony
            sayhello('Tony');
        }
原文地址:https://www.cnblogs.com/fightjianxian/p/8679113.html