PHPThinkPHP+PhpStorm常用调试方法

小编开发PHP项目选用的是ThinkPHP3.2+PhpStorm那样的条件,下边结合实际开发经历介绍一下大规模的调剂方法。

[ThinkPHP框架开启调试方式]

ThinkPHP有专门为开发进程而设置的调试格局,开启调试方式后,会就义一定的举办成效,但带来的有益和除错效用格外值得。

什么样打开
拉开调试方式很简短,只须要在进口文件中加进一行常量定义代码。在做到开发阶段安顿到生育环境后,只需求关闭调试格局或者去除调试情势定义代码即可切换来布置形式。

<?php
 // 开启调试模式
 define('APP_DEBUG', true);
 // 定义应用目录
 define('APP_PATH', './Application/');
 // 加载框架入口文件
 require './ThinkPHP/ThinkPHP.php';

调试形式的亮点在于:

  • 打开日志记录,任何错误新闻和调试音信都会详细笔录,便于调试;
  • 关闭模板缓存,模板修改可以即时生效;
  • 记录SQL日志,方便分析SQL;
  • 闭馆字段缓存,数据表字段修改不受缓存影响;
  • 严厉检查文件大小写(固然是Windows平台),扶助你提前意识Linux布署可能引致的隐患难题;
  • 透过页面Trace功效更好的调试和发现错误;

[日志]

日记的拍卖工作是由系统自动进行的,在打开日志记录的意况下,会记录下同意的日志级其余富有日志音信。

框架默许是在调试方式下记录日志音讯,即使须要在配置格局下打开日志记录,要求在配备中拉开LOG_RECORD参数,以及可以在应用配置文件中安排须要记录的日志级别。日记的笔录并非实时保存的,唯有当当前哀告完结或者相当截止后才会实际写入日志信息,否则只是记录在内存中。

'LOG_RECORD' => true, // 开启日志记录
'LOG_LEVEL'  =>'EMERG,ALERT,CRIT,ERR', // 只记录EMERG ALERT CRIT ERR 错误

手动记录日志
此地,主要介绍下使用框架提供的Log日志类的三个主意来手动记录日志。

  1. Log::record(),记录日志音信到内存。
    \Think\Log::record(‘测试日志音信’);
    \Think\Log::record(‘测试日志音信,那是告诫级别’,’WARN’);//默许的话记录的日记级别是ERR,也可以指定日志级别
  2. Log::save(),把保存在内存中的日志音信(用指定的记录格局)写入。
    是因为系统在呼吁为止后会自动调用Log::save方法,所以常常,你只须要调用Log::record记录日志音信即可。
  3. Log::write(),实时写入一条日志新闻。
    使用record方法记录的日志新闻不是实时保存的,假若急需实时记录以来,可以利用write方法。write方法写入日志的时候
    不受配置的允许日志级别影响,可以实时写入随便级其余日记音讯。

    \Think\Log::write(‘测试日志新闻,那是告诫级别,并且实时写入’,’WARN’);

[利用Xdebug工具]

参见我写的其它一篇小说,Mac下给PhpStorm安装调试工具Xdebug

[变量调试]

变量调试对于简易的标题得以起到很迅猛的调试成效,有时候通过对变量的考察可以急忙定位到标题地方,但是比较使用Xdebug方法,紧缺流程性和全体观。

  1. echo方法
    echo
    输出一个要么五个字符串或变量值,多个值时期用逗号分隔
    ,他是php语句,不是函数。因为他不是函数,所以并未重返值,无法看做表达式的一片段拔取。
    echo $str,’world’,’hello!’;
    echo $str;
  2. print方法
    print()用于出口一个或八个字符串或变量值的新闻。它不得不打印出大约类型变量的值(如int,string),不可以打印数组和目的。稍慢于echo。
  3. print_r方法
    可以把字符串和数字大概地打印出来,而数组则以括起来的键和值得列表方式显得,并以Array初步。print_r重返值是布尔型的,参数是mix类型的,可以是字符串,整形,数组,对象类print_r()
    显示关于一个变量的简单领悟的信息。借使给出的是 string、integer 或
    float,将打印变量值本身。如若给出的是
    array,将会安份守己一定格式显示键和因素。print_r()
    对数组效用后将把数组的指针移到终极边。使用 reset()
    可让指针回到起始处。

    $data = [‘test1’, ‘test2’, ‘test3’, ‘test’ => ‘test’];
    print_r($data);//Array ( [0] => test1 [1] => test2 [2]
    => test3 [test] => test )
  4. var_dump方法
    用以体现关于一个或多少个说明式的结构新闻,包罗表明式的连串与值。数组将递归展开值,通过缩进突显其布局。音讯比较详细,用的较多。
    $data = [‘test1’, ‘test2’, ‘test3’, ‘test’ => ‘test’];
    var_dump($data);
    array (size=4)
    //输出
    0 => string ‘test1’ (length=5)
    1 => string ‘test2’ (length=5)
    2 => string ‘test3’ (length=5)
    ‘test’ => string ‘test’ (length=4)
  5. dump方法
    dump不是php方法,属于ThinkPHP框架自带的,工能和var_dump差不多。

[属性调试]

支付过程中,有些时候为了测试质量,日常要求调剂某段代码的运作时刻照旧内存占用开支,系统提供了G方法可以很便宜的收获某个区间的运转时刻和内存占用情状。

G(‘begin’,’end’)
表示统计begin地点到end地点的举行时间(单位是秒),begin必须是一个已经标记过的职位,若是那个时候end地方还没被标记过,则会自行把当下任务标记为end标签,输出的结果类似于:0.0056s

G('begin');
$data = ['test1', 'test2', 'test3', 'test' => 'test'];//这里是其他代码
G('end');
echo G('begin', 'end', 5) . 's';//数字代表保留几位小数

如果条件扶助内存占用总结以来,还足以运用G方法举行区间内存花费总括(单位为kb)

G('begin','end','m').'kb';

[模型调试]

  1. 调剂执行的SQL语句
    getLastsql措施来输出上次执行的sql语句,有时候数据不相符预期时,用此办法可以方便的寓目询问语句,判断逻辑是否有误。
    $User = M(“User”); // 实例化User对象
    $User->find(1);
    echo $User->getLastSql();
    // 3.2本子中得以应用简化的点子
    echo $User->_sql();
  2. 调节数据库错误音信

CURD操作假如再次回到值为false,表示数据库操作爆发错误,这几个时候就需要运用模型的getDbError方法来查阅数据库再次来到的切切实实错误消息。

   $User = M("User"); // 实例化User对象
   $result = $User->find(1);
   if(false === $result){
       echo $User->getDbError();
   }      

相关文章