ThinkPHP3.2学习笔记4——实用项
代码调试
跟踪信息
跟踪信息:就是查询/展示系统的执行相关状况。
在thinkPHP中跟踪信息默认是关闭的,如果需要使用,则需要开启,可以通过SHOW_PAGE_TRACE开启。
上述的配置项在主配置文件中是不存在的,需要使用的话可以自己在配置文件中定义。
Application/Comm/Cof/config.php
两种模式
在thinkPHP系统为了方便开发,提供了一下两种模式:开发/调试模式、生产模式。
调试模式:是指在开发调试阶段所使用的模式,错误信息比较详细;
生产模式(默认):是指项目上线的时候所使用的模式,错误信息比较模糊;
配置项:APP_DEBUG,定义的位置在入口文件中。
sql调试
_sql()
获取模型中最后一条sql语句:$model->getLastSql();
在thinkPHP3.2之后,系统增加了一个别名方法:$model->_sql()
例子:
//sql调试
public function test22(){
$model=M('Student');
$data=$model->select();
//echo $model->getLastSql();//获取SQL语句
echo $model->_sql();
}
fetchSql
语法格式:$model->where()->limit()…->oerder()->fetchSql(true)
->CURD操作;
- fetchSql方法使用时,可以完全看作是辅助方法,所以要求必须在model之后,CURD操作之前,顺序无所谓。
- fetchSql方法只能在Thinkphp3.2.3版本之后使用。
性能调试
在thinkPHP中系统提供了一个性能测试的快速方法,这个快速方法家叫做G。
语法格式:
G('开始标记');
需要统计效率的代码段
...
G('结束标记');
G('开始标记','结束标记',数字/字符m);
- 针对G方法的第三个参数:如果参数的是数字,则表示统计代码的执行时间,数字表示精确的小数位数,单位是秒;如果是字符m,则表示统计内存开销,单位是byt(需要服务器的支持)。
会话控制
会话支持一般都是指的是cookie和session。
session的支持
session方法:定义在系统函数库文件中functions.php
- session(‘name’,‘value’)------创建一个名为name的session值,值是value
- $value=session(‘name’)-----读取session中的name元素值,值赋给value
- session(‘name’,null)----------删除名为name元素的值
- session(null)-------------------删除全部session元素
- session()-----------------------读取全部session信息
- session(’?name’)-------------判断名为name的session是否存在,如果存在则返回true;如果不存在,则返回false
例子:
public function test40(){
//1、设置
session('name','韩梅梅');
session('name2','李雷');
dump($_SESSION);
//2、读取单个
value=session('name');
dump($value);
//3、清空单个
session('name',null);
dump($_Session);
//4、全部删除
session('name3','马冬梅');
//session(null);
//dump($_SESSION);
//5、读取全部
dump(session());
//6、判断某个session是否存在
dump(session('?name3'));
}
cookie的支持
- cookie(‘name’,‘value’)----------设置一个名为name的cookie值,值是value
- cookie(‘name’,‘value’,3600)—设置一个名为name的cookie值,值是value,有效期是3600s
- $value=cookie(‘name’)---------读取名为name的cookie赋值为value
- cookie(‘name’,null)--------------删除名额外name的cookie值
- cookie(null)-----------------------删除全部的cookie(有问题)
- cookie()---------------------------获取全部的cookie
例子:
public function test41(){
//1、设置没有有效期的cookie
cookie('name','张三');
//2、设置有效期为3600s的cookie
cookie('name2','李四',3600);
//3、获取单个cookie值
dump(cookie('name2'));
//4、清空单个
cookie('name2',null);
//5、清空全部
//cookie(null);
//6、获取全部
dump(cookie());
}
文件加载
1.函数库形式加载
函数库在ThinkPHP中有三大类:系统函数库文件(functions.php)、应用级别函数库文件(function.php)、分组级别函数库文件(function.php)。
- 上述三大类的文件只有系统函数库文件默认是存在的,其他两类默认不存在,需要自行创建;
例子:
1.使用函数库文件形式定义需要的函数,函数名gbk2utf8
Application/Common/Common/function.php
<?php
function gbk2utf8(){
echo 'gbk2utf8';
}
2.测试
//
public function test42(){
//使用函数
gbk2utf8();
}
说明:
- 不需要引入funciton.php,系统在执行的时候自动棒我们引入了文件function.php文件;
- 如果函数定义在应用几倍的函数库文件中,则能在全部的分组(整个应用)使用;如果函数定义在某个分组的函数库文件中,则只能在当前的分组中的使用,否则会报函数未定义。
2.通过配置项动态加载
在系统的执行流程中有一个文件会被执行到----App.class.php
在该类中初始化方法执行了load_ext_file函数:LOAD_EXT_FILE=>‘abc,def,ghi…’;
扩展:C方法(快速方法之一—作用是操作ThinkPHP中的配置项)
- C(name,value);------设置配置项name的值,值是value
- C(name);--------------读取配置项name的值
- C();---------------------读取全部的配置项
例子:
1.在应用级别的配置文件中定义配置项LOAD_EXT_FILE,引入文件info.php
'LOAD_EXT_FILE' => 'info',
2.在应用函数库文件目录中定义一个info.php
Application/Common/Common/info.php
<?php
function getInfo(){
//输出phpinfo的信息
phpinfo();
}
3.测试
//
public function test43(){
//使用函数
getInfo();
}
3.通过load方法加载
语法格式:load(’@/不带后缀的PHP文件名’);
- 文件必须存在于分组级别的函数库目录中,并且只能用于定义的分组中。
例子:在分组目录中创建文件hello.php,然后在其中定义一个函数,然后再去使用load方法加载并且使用其中的函数。
1.Appliction/Admin/Common/hello.php
<?php
function sayhello($who){
//使用函数
echo 'hello'.$who;
}
2.测试—在控制器中使用load方法加载hello文件
//load
public function test44(){
//load
load('@/hello');
//调用函数
sayhello('world');
}