我对编程很陌生,当我开发我的程序时,我使用一个简单的策略来调试它:我编写程序以在操作重要语句时打印调试消息,例如
function foo1($number)
{
//foo_print("I am function foo1({$number}). <br/>");
//foo_print("I am going to increase 'count' by {$number}. <br/>");
$GLOBALS["count"] = $GLOBALS["count'] + $number;
//foo_print("Now 'count' = {$GLOBALS["count"]}, I finished my task, BYE BYE. <br/>");
}
function isFoo($number)
{
//foo_print("I am function isFoo({$number}). <br/>");
//foo_print("I am checking if the number < 3 or not, if so, it is Foo, if not, it is not Foo. <br/>");
if($number <= 3)
{
//foo_print("Found that number = {$number} <= 3, I return true, BYE BYE. <br/>");
return true;
}
//foo_print("Found that number = {$number} > 3, I return false, BYE BYE. <br/>");
return false;
}
我称它们为调试消息,但正如你所看到的,它们实际上是描述程序在每一行上做什么的彻底注释。我只是编写函数 foo_print(( 在调试程序时将它们打印出来。并在实际使用中将它们注释掉。
在实际运行模式和调试模式之间切换时,我无需逐行插入和删除注释符号"//",而是foo_print功能来完成这项工作:可以将其设置为打开或关闭。
define(FOO_PRINT, 1)
function foo_print($message)
{
if(FOO_PRINT) print $message;
// if FOO_PRINT == 0 then do nothing.
}
但我认为这种方法是无效的,每次打印消息之前都必须检查FOO_PRINT。
我的问题是以下一项或两项
当我不想使用它时,我可以做一些事情来告诉 php 忽略我的 foo_print(( 函数吗?
也许,我应该使用"//"符号以纯注释样式编写消息,然后告诉 php 解释器在调试模式下打印这些注释消息,而不是使用foo_print函数。我能做到吗?
我认为,除了调试简便之外,这种方法的优势在于,当我以后回来查看程序时,它可以帮助我理解该程序。(对我来说,它非常漫长而复杂,我相信我很快就会忘记它。
我发现现在使用高级 IDE 和调试工具来开发我的程序非常复杂。我相信其中一些高级调试工具可以做一些类似于我想要的事情,但是我已经在PHP-eclipse和xdebug上尝试了一个星期,它让我一无所获。谢谢。
您可以定义两个函数,其中一个输出调试数据,另一个不输出。然后使用变量名称来包含要调用的函数的名称,并通过调用变量中的函数来执行调试。喜欢这个:
function debug_print($data) {
echo $data;
}
function debug_none($data) {
}
$debug = 'debug_print';
$debug('Testing one'); // This prints out 'Testing one'
$debug = 'debug_none';
$debug('Testing two'); // This doesn't print out anything
如果这样做,请不要忘记向任何想要使用该函数的函数添加global $debug
。
编辑:还有一种更面向对象的方式来获得相同的结果。您可以定义一个接口并为其编写几个实现,允许您选择在运行时使用哪一个。
$debugmode = true;
interface Debugger {
public function out($data);
}
class EchoDebugger implements Debugger {
public function out($data) {
echo $data;
}
}
class NullDebugger implements Debugger {
public function out($data) {
// Do nothing
}
}
if($debugmode)
$debugger = new EchoDebugger();
else
$debugger = new NullDebugger();
$debugger->out('This will be output if $debugmode is true');
没有芽,
没有这样的事情,你必须每次都定义一个条件。
这不能在 php 代码中完成