10-10 调试
在开发和测试期间打印和保存信息将有助于消除由于变量取值有误或由于使用了不正确的变量名所导致的错误。PHP为此实现了很多函数,使调试变得更简单(见表10-9)。
表10-9 用于调试的函数
|
名 称 |
描 述 |
|
echo() |
打印一个简单变量或值 |
|
print() |
打印一个简单变量或值 |
|
printf() |
打印一个格式化字符串 |
|
var_dump() |
打印一个变量的类型和内容 |
|
print_r() |
递归打印一个数组或对象的内容 |
|
debug_backtrace() |
返回一个包含调用栈和其他值的数组 |
函数echo()、print()和printf() 只能生成普通的输出,所以使用这些函数生成调试输出时可能有些让人糊涂,不过生成任何输出都可以采用这些方法。
通过建立一个名为debug_print()的函数,可以很容易地使用调试信息,并能根据需要打开或关闭调试信息。可以把这个函数定义在一个包含文件中(常量DEBUG设置为true或false)。
代码


工作原理
DEBUG常量设置为true时,这个函数会生成输出;如果设置为false,这个函数则没有任何输出,这是一种打开和关闭调试信息的简便方法。debug_print()函数调用php_sapi_name()函数来确定PHP脚本如何执行,取决于不同的处理类型,它会生成不同的输出。
通过在文件debug.inc中定义debug_print()函数,只需一条简单的包含语句以及一个或多个debug_print()函数调用,就能在多个脚本中重用这个函数。
代码

工作原理
在脚本最上面包含了这个提供调试信息的包含文件,并用于打印一个数组的内容。

PHP实现了一些所谓的魔法常量,它们并不真的是常量,因为这些魔法常量会根据使用的场合改变值(见表10-10)。
表10-10 魔法常量
|
名 称 |
描 述 |
|
__FILE__ |
当前文件名 |
|
__LINE__ |
当前行号 |
|
__FUNCTION__ |
当前函数名 |
|
__CLASS__ |
当前类名 |
|
__METHOD__ |
当前方法名 |
可以修改上例中的debug_print()函数,在其中使用_FILE_和_LINE_打印生成调试信息的位置。
代码


工作原理
在这个例子中,向debug_print()函数增加了两个参数。如以下输出所示,debug_print()函数可以生成两种形式的输出。第一个函数调用使用$file和$line的默认值,它会使系统插入包含文件名以及定义函数所在的行号。第二个调用中使用了_FILE_和_LINE_作为参数,它们将分别被调用此函数的文件名和调用所在的行号替换。
|

注意,函数定义中将两个魔法常量用作为$file和$line的默认值。如果调用中忽略了其中一个或两个参数,忽略的参数将被指示包含文件(定义该函数的文件)和相应行号的值所替换。





