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');
}
ThinkPHP---thinkphp文件加载的更多相关文章
- thinkphp 3.2 加载第三方库 第三方命名空间库
tp 自动加载的介绍: http://document.thinkphp.cn/manual_3_2.html#autoload 第三方库不规范库 不适用命名空间的库 可以使用import函数导入,其 ...
- scrapy cookies:将cookies保存到文件以及从文件加载cookies
我在使用scrapy模拟登录新浪微博时,想将登录成功后的cookies保存到本地,下次加载它实现直接登录,省去中间一系列的请求和POST等.关于如何从本次请求中获取并在下次请求中附带上cookies的 ...
- 前端设计中关于外部js文件加载的速度优化
在一般情况下,许多人都是将<script>写在了<head>标签中,而许多浏览器都是使用单一的线程来加载js文件的,从上往下,从左往右. 若是加载过程出错,那么网页就会阻塞,就 ...
- php基础知识(3)(文件加载include)
文件加载 综述: 有4个文件加载的语法形式(注意,不是函数): include, include_once, require, require_once; 他们的本质是一样的,都是用于加载/引入/ ...
- 文件加载---理解一个project的第一步
当我最开始写php的时候,总是担心这个问题:我在这儿new的一个class能加载到对应的类文件吗?毕竟一运行就报Fatal Error,什么**文件没找到,类无法实例化等等是一种很“低级”的错误,怕别 ...
- HTML5文件加载进度管理
/** * 文件加载进度管理 */ DownloadUtils = function(options){ options = options || {}; this.init(options); }; ...
- js文件加载优化
在js引擎部分,我们可以了解到,当渲染引擎解析到script标签时,会将控制权给JS引擎,如果script加载的是外部资源,则需要等待下载完后才能执行. 所以,在这里,我们可以对其进行很多优化工作. ...
- Java基础之Throwable,文件加载
Java中的异常与错误都继承自Throwable,Exception又分为运行时异常(RuntimeException)和编译时异常. 运行时异常是程序的逻辑不够严谨或者特定条件下程序出现了错误,例如 ...
- 在IIS上新发布的网站,样式与js资源文件加载不到(资源文件和网页同一个域名下)
在IIS上新发布的网站,网站能打开,但样式与js资源文件加载不到(资源文件和网页是同一个域名下,例如:网页www.xxx.com/index.aspx,图片www.xxx.com/pic.png). ...
随机推荐
- 第二天,初步slide第一版和家的照片墙
今天基本完成任务, 1. 写了昨天的总结, 2. 完成slides的第一个完整版. 3. 家里布置了照片墙. 4. 其他的 未完成: 1. 框架搭建:Creasy没来. 领导力:为公司利益早起,任务说 ...
- Brackets常用插件
Emmet插件:https://github.com/emmetio/brackets-emmet AngularJS插件:https://github.com/angular-ui/AngularJ ...
- HDU5465/BestCoder Round #56 (div.2) 二维树状数组
Clarke and puzzle 问题描述 克拉克是一名人格分裂患者.某一天,有两个克拉克(aa和bb)在玩一个方格游戏. 这个方格是一个n*mn∗m的矩阵,每个格子里有一个数c_{i, j}ci ...
- 玲珑学院OJ 1023 - Magic boy Bi Luo with his excited math problem 树状数组暴力
分析:a^b+2(a&b)=a+b so->a^(-b)+2(a&(-b))=a-b 然后树状数组分类讨论即可 链接:http://www.ifrog.cc/acm/probl ...
- 电脑的系统盘只有10G了
软件也是缓存多了,准备把一些让家人卸载,昨天开始布置培训任务就是有一个电报的程序,把流程说了下,从今天开始就会指导,错误点分析.
- 【前端】JavaScript表达式-新手必看
转载请注明出处:http://www.cnblogs.com/shamoyuu/p/6145384.html 一.什么是表达式 表达式就是JavaScript里一个短句,JavaScript解释器会将 ...
- 用nginx搭建基于rtmp或者http的flv、mp4流媒体服务器
http://itindex.NET/detail/48702-nginx-rtmp-http 一.流媒体播放方式 1. HTTP方式 这种方式要下载FLV视频文件到本地播放,一旦FLV视频文件下载 ...
- 【145】◀▶ .NET Framework类库索引
C#编程基础: A1 ………… 基础A2 ………… using 关键字A3 ………… as 关键字A4 ………… is 关键字A5 ………… switch 关键字A6 ………… return 语句关键 ...
- POJ 1659 Frogs' Neighborhood (贪心)
题意:中文题. 析:贪心策略,先让邻居多的选,选的时候也尽量选邻居多的. 代码如下: #pragma comment(linker, "/STACK:1024000000,102400000 ...
- Ubuntu12.04安装JDK(jdk-6u45-linux-x64.bin)(转载)
首先下载jdk-6u45-linux-x64.bin, 如果是32bit系统下载相应的i386即可. 更改文件权限-> chmod a+x jdk-6u45-linux-x64.bin. 创建目 ...