zoukankan      html  css  js  c++  java
  • 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');
            }
  • 相关阅读:
    Android自定义之仿360Root大师水纹效果
    Android之TextView的Span样式源码剖析
    Android之TextView的样式类Span的使用详解
    随着ScrollView的滑动,渐渐的执行动画View
    仿微信主界面导航栏图标字体颜色的变化
    android自定义之 5.0 风格progressBar
    Android性能优化之内存篇
    Android性能优化之运算篇
    How to install Zabbix5.0 LTS version with Yum on the CentOS 7.8 system?
    How to install Zabbix4.0 LTS version with Yum on the Oracle Linux 7.3 system?
  • 原文地址:https://www.cnblogs.com/fightjianxian/p/8679113.html
Copyright © 2011-2022 走看看