PHP调试的基础知识

某种程度上,PHP无法正常运行…

没有人能从一开始就写出完美的程序代码。
人们在与错误抗争的同时生活。
不知道曾经有没有伟人说过这样的话,
但是无论如何,程序总是会存在错误的。

无论如何都会不断产生bug…
流着眼泪挥舞白旗并不酷,
所以我选择进行调试来应对。

我会简单总结一下在php中如何进行这样的调试。

怀疑打字错误

打字错误总是在谋杀你,比如将match写成mtach,将length写成lenght。

还有一种可能是将build_check_flag与room_check_flag弄混了,这可能是因为从某处复制并未正确修改所导致的错误。

怀疑语法错误

如果(isset($var))是if()和isset()的组合。
如果将其写成if(isset($var),将会产生语法错误。
尽管像上面的例子中,括号嵌套只有两层还算好玩,但如果有5个嵌套,那我肯定会晕倒的。

由于编辑器的设置不同,有些编辑器可以给()添加突出显示,因此考虑使用该功能可能会不错。

检查变量。

变量的本质是可变的,因此才被称为变量。
在这个世界上不存在能够完全掌握所有变量的强者。
因为没有掌握变量,所以才会出现变量造成问题的情况。

如果无法把握,那就将其变得可见便好。
在可能会发生错误的行之前编写并执行echo $var的话,
往往会发现这个$var的内容出乎意料。

在中文中,只需要一种选项稍微改写如下:

尽管无法简单地输出数组和布尔值的内容,却可以这样写:
对于数组,使用var_dump($array_var);
对于布尔值,使用var_export($boolean_var)。

我們使用var_dump($array_var)來輸出陣列變數,但顯示的字串非常難讀。
可能只看一眼就會暈倒。
所以

echo '<pre>';
var_dump($array_var);
echo '</pre>';

以一种易于阅读的形式输出。

预测趋势。

“有bug在某个地方发生了”
这种情况很糟糕。需要修复bug,但是不知道bug在哪里!

在这种情况下,阅读程序的流程会很有帮助。
这里会变成这样…
那就会变成这样…
那样是否会发生…
如果是这样的话,可能会发现错误…

如果无法理解流程,即使能使用die()和exit(),也只是用强硬手段来实现理解。

die('1');
if($flag){
   die('2');
}else(
   die('3');
}
die('4');

描述下面的内容,并以中文本土语言进行改述,只需要一个选项:
描述清楚了之后,我们能够知道数据通路经过的位置。
如果显示为1,那么在if语句之前的代码已经执行完了。
如果显示为2,那么if语句中的$flag为true。
如果显示为3,那么相反,$flag为false。
如果显示为4,那么就说明已经到达了if语句的最后部分。

如果能够找到错误的话

终于站在了赛场上。

编辑后记

我是第二天入职,被委以在公司内独特的框架上进行新的实现的任务。由于感到无能,所以进行了一番调查。阅读他人的源代码并进行追加真的太辛苦了…只要能够进行调试,就有可能变得更强大。

广告
将在 10 秒后关闭
bannerAds