请选择 进入手机版 | 继续访问电脑版

SpeedPHP框架

 找回密码
 注册成为新用户

QQ登录

只需一步,快速开始

查看: 5589|回复: 0

[开发指南] dump变量调试

[复制链接]
发表于 2012-8-5 11:57:35 | 显示全部楼层 |阅读模式

dump变量调试是在PHP框架日常开发中最常用的调试手段,开发者应善用dump调试工具,以提高开发效率。

dump变量调试可以测试一切PHP变量,下面举几个常用的例子:


排错案例
  1. <?php
  2. class main extends spController
  3. {

  4.         function index(){
  5.                 $tpl = $this->spArgs('tpl','default'); // 接收tpl参数作为显示的模板名称,默认是default
  6.                 if( $tpl = 'green' ){
  7.                         // 当模板是绿色的时候
  8.                         $this->title = "绿色模板";
  9.                 }else{
  10.                         // 当模板是默认的时候
  11.                         $this->title = "默认模板";
  12.                 }
  13.                 $this->display($tpl.'.html');
  14.         }

  15. }
  16. ?>
复制代码

以上的代码运行后,我们发现无论输入的tpl值是否green,都是显示green的模板,这是为什么呢?

我们在display之前加入dump来看看$tpl的值。

  1. <?php
  2. class main extends spController
  3. {

  4.         function index(){
  5.                 $tpl = $this->spArgs('tpl','default'); // 接收tpl参数作为显示的模板名称,默认是default
  6.                 if( $tpl = 'green' ){
  7.                         // 当模板是绿色的时候
  8.                         $this->title = "绿色模板";
  9.                 }else{
  10.                         // 当模板是默认的时候
  11.                         $this->title = "默认模板";
  12.                 }
  13.                 dump($tpl);
  14.                 $this->display($tpl.'.html');
  15.         }

  16. }
  17. ?>
复制代码
发现$tpl一直都是'green',那么我们再在多个位置dump($tpl);看看。
  1. <?php
  2. class main extends spController
  3. {

  4.         function index(){
  5.                 $tpl = $this->spArgs('tpl','default'); // 接收tpl参数作为显示的模板名称,默认是default
  6.                 dump($tpl); // 提交参数没问题
  7.                 if( $tpl = 'green' ){
  8.                
  9.                         dump($tpl); // 绿色?
  10.                
  11.                         // 当模板是绿色的时候
  12.                         $this->title = "绿色模板";
  13.                 }else{
  14.                
  15.                         dump($tpl); // 默认?
  16.                
  17.                         // 当模板是默认的时候
  18.                         $this->title = "默认模板";
  19.                 }
  20.                 dump($tpl);
  21.                 $this->display($tpl.'.html');
  22.         }

  23. }
  24. ?>
复制代码
最终发现,是在IF判断的位置,$tpl值被改变了,把“=”改为“==”,运行程序正常。
  1. <?php
  2. class main extends spController
  3. {

  4.         function index(){
  5.                 $tpl = $this->spArgs('tpl','default'); // 接收tpl参数作为显示的模板名称,默认是default
  6.                 if( $tpl == 'green' ){
  7.                         // 当模板是绿色的时候
  8.                         $this->title = "绿色模板";
  9.                 }else{
  10.                         // 当模板是默认的时候
  11.                         $this->title = "默认模板";
  12.                 }
  13.                 $this->display($tpl.'.html');
  14.         }

  15. }
  16. ?>
复制代码
通常,IF中使用双等号的时候,要注意是否写少了一个等号。有个推荐的编程习惯,就是把IF内的判断式调转一下位置,值在前变量在后。如上例中写成if( 'green' == $tpl ),那么即使写错为“=”,$tpl也不会被赋值,这样更容易判断出问题所在,不会被$tpl的取值影响。在框架的多个例子中到有这种写法。
检查提交参数
在接收到提交参数后,通常我们可以dump一下全部的提交参数出来看看,检查表单提交的数据是否和理想中一样。
  1. dump($this->spArgs());
复制代码
入库前检查

在数据入库之前,我们通常可以dump一下将入库的数据出来看看是否正确。

  1. $row = array(
  2.         'username' => 'jake',
  3.         'contents' => '大家好',
  4.         'ctime' => date('Y-m-d H:i:s'),
  5. );
  6. dump($row); // 看看入库的数据是否是正确的。
  7. //spClass('m_guestbook')->create($row); // 先注释入库代码,dump检查后没问题再入库
复制代码
您需要登录后才可以回帖 登录 | 注册成为新用户

本版积分规则

手机浏览|简版|中文PHP框架|开源协议|SpeedPHP.com ( 粤ICP备08008671号

GMT+8, 2020-7-5 17:54

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表