2013-05-29 37 views
1

我创建了一个功能,让我调试PHP脚本,只要变量($debug)设置为1不能正常工作PHP函数(呼应字符串,简单)

function debug($msg) { 
    if ($debug == 1) { 
     echo $msg; 
    } else { 
     return false; 
    } 
} 

这样,在(前functions.php文件名为)我的脚本的顶部,我写:

$debug = 1; 

启用调试,则:

debug("Function executed: " . $data); 

在某些点,以便我知道字符串值/在这一点上的任何事情,所需的响应是屏幕上显示的消息。

但是,无论$debug字符串的值是什么,我都不会看到任何echo'd语句。

这是如何实现的?

+1

如何使用调试器? – zerkms

+0

@zerkms我认为他的意思是在开发模式而不是生产模式下运行代码。所以他需要显示某些信息。他不是指实际的代码调试:) – itsols

+0

是的,谢谢itsols。对不起,它不是很清楚! – Ben

回答

2

这很难说,因为你所提供的数据太少。

原因可能是您的$debug变量在函数内部是未知的。由于使用global s不建议,请考虑使用常量define("DEBUG",1);

编辑

我内another question我如何使用一个类做同样的事情类名称也全局访问呈现。

+0

谢谢你的帮助!我已经成功地使用常量重新创建函数。 – Ben

+0

@BenPearlKahan事实上,你也可以检查一个常量是否存在;使用['defined()'](http://php.net/manual/en/function.defined.php)函数 – Voitcus

5

调试功能不可用,因为它超出了范围。您:

  1. 需要把它作为参数传递
  2. 使用global关键字把它列入你的函数(灰心)

function debug($msg, $debug){ 
    if($debug==1){ 
    echo $msg; 
} else { 
    return false; 
    } 
} 

function debug($msg){ 
    global debug; 
    if($debug==1){ 
    echo $msg; 
} else { 
    return false; 
    } 

}

+0

谢谢你。该函数的意义在于,我不必注释掉所有单个'echo'命令,因此将它作为参数传递就会产生相同的问题。为什么要建立一个'全球'关键字不鼓励? – Ben

+2

使用全局变量时,单词'global'本身并不会被阻止。如果在许多项目共享的函数中使用此全局变量,或者在某些情况下未设置全局变量,可能会出现问题。你的函数在逻辑上应该仅仅依赖于你作为参数传递的东西,仅此而已。将来有人可能会使用它,必须知道它的参数是他必须提供的唯一的东西,没有什么可做的。 – Voitcus

+0

谢谢你的帮助。我已经成功地使用常量重新创建函数。你的回答很好,谢谢。 – Ben

0

全局变量不能被函数访问,直到你这样做。例如:

function debug($msg({ 
    global $debug; 
    etc... 

PS:请不要这样做。找一个更好的方法。真。

+0

该函数的意义在于,我不必将所有的单个' echo“命令,因此将其作为参数传递会产生相同的问题。你能否提出一个更好的选择? – Ben

+0

记录。但是define()会比全局更好。 – markdwhite

0

$调试是你的全局变量,所以它不是在你的函数访问

0

还有宣布一个const的可能性,(然后只需确保命名空间是正确的),像这样:

const debug = true; 
function newPrint($msg) { 
    if (\debug === true) { 
     echo $msg; 
    } else { 
     return false; 
    } 
} 
\newPrint("heey");//will print "heey" 

所以只是不使用变量,但使用常量。