#1 jake
dump变量调试是在PHP框架日常开发中最常用的调试手段,开发者应善用dump调试工具,以提高开发效率。
dump变量调试可以测试一切PHP变量,下面举几个常用的例子:
排错案例
class main extends spController
{
function index(){
$tpl = $this->spArgs('tpl','default'); // 接收tpl参数作为显示的模板名称,默认是default
if( $tpl = 'green' ){
// 当模板是绿色的时候
$this->title = "绿色模板";
}else{
// 当模板是默认的时候
$this->title = "默认模板";
}
$this->display($tpl.'.html');
}
}
?>
以上的代码运行后,我们发现无论输入的tpl值是否green,都是显示green的模板,这是为什么呢?
我们在display之前加入dump来看看$tpl的值。
class main extends spController
{
function index(){
$tpl = $this->spArgs('tpl','default'); // 接收tpl参数作为显示的模板名称,默认是default
if( $tpl = 'green' ){
// 当模板是绿色的时候
$this->title = "绿色模板";
}else{
// 当模板是默认的时候
$this->title = "默认模板";
}
dump($tpl);
$this->display($tpl.'.html');
}
}
?>
发现$tpl一直都是'green',那么我们再在多个位置dump($tpl);看看。
class main extends spController
{
function index(){
$tpl = $this->spArgs('tpl','default'); // 接收tpl参数作为显示的模板名称,默认是default
dump($tpl); // 提交参数没问题
if( $tpl = 'green' ){
dump($tpl); // 绿色?
// 当模板是绿色的时候
$this->title = "绿色模板";
}else{
dump($tpl); // 默认?
// 当模板是默认的时候
$this->title = "默认模板";
}
dump($tpl);
$this->display($tpl.'.html');
}
}
?>
最终发现,是在IF判断的位置,$tpl值被改变了,把“=”改为“==”,运行程序正常。
class main extends spController
{
function index(){
$tpl = $this->spArgs('tpl','default'); // 接收tpl参数作为显示的模板名称,默认是default
if( $tpl == 'green' ){
// 当模板是绿色的时候
$this->title = "绿色模板";
}else{
// 当模板是默认的时候
$this->title = "默认模板";
}
$this->display($tpl.'.html');
}
}
?>
通常,IF中使用双等号的时候,要注意是否写少了一个等号。有个推荐的编程习惯,就是把IF内的判断式调转一下位置,值在前变量在后。如上例中写成if( 'green' == $tpl ),那么即使写错为“=”,$tpl也不会被赋值,这样更容易判断出问题所在,不会被$tpl的取值影响。在框架的多个例子中到有这种写法。
在接收到提交参数后,通常我们可以dump一下全部的提交参数出来看看,检查表单提交的数据是否和理想中一样。
dump($this->spArgs());入库前检查
在数据入库之前,我们通常可以dump一下将入库的数据出来看看是否正确。
$row = array(
'username' => 'jake',
'contents' => '大家好',
'ctime' => date('Y-m-d H:i:s'),
);
dump($row); // 看看入库的数据是否是正确的。
//spClass('m_guestbook')->create($row); // 先注释入库代码,dump检查后没问题再入库
2012-08-05 11:57:35