我想知道如何为他们的应用程序创建一个调试室。
我的例子是我将可变内容输出到屏幕上,让我可以看到我的变量在整个过程中的作用。确保他们正在做他们应该做的事情。 (穷人的tdd?)
-------- NEW CODE --------------------
所以这就是我现在提出的,但它涉及一个!!全局变量!!
我的脚本的所有页面都包含一个公共文件。在那里我提出以下内容:
<?php //COMMON FILE
$debug_mode = 'on'; //my trigger
if( strtolower($debug_mode) == 'on'){
$debug = "<hr /><pre>";
if( file_exists('debug_mode.php') ){ //This file will never be used in a
include('debug_mode.php'); //a production environment
}
}
function debug($str, &$debug){
if( function_exists('debugff') ){
$str = debugff($str, $debug);
}
else{
unset($debug);
}
}
?>
<?php //DEBUG_MODE FILE NEVER USED IN PRODUCTION MODE
if( strtolower($debug_mode) == 'on'){
function debugff($debugstring, &$debug){
global $debug;
if( is_null($debugstring) ){
echo $debug . "</pre><hr />";
}
else{
$debug .= $debugstring . "\n";
}
}
}
?>
要使用该脚本,我使用调试函数。
debug(“username:$ user”,$ debug);
我可以做到这一百万次。当我想打印结果时,我只需要调用
debug(null,$ debug);
我听过无数次从不使用全局变量,这是我第一次实现它。按照我设置的方式设置意味着在“真实世界”中全局变量永远不会被调用,但是如何从这里获取全局变量。
答案 0 :(得分:1)
尝试学习PHP框架。他们以OOP的方式更好地解决了这些问题。
无论如何,在你的例子中,你可以删除很多代码:
$debug_mode = TRUE;
function dump() {
global $debug_mode;
if ($debug_mode) {
call_user_func_array('var_dump', func_get_args());
}
}
然后,您可以使用dump($ var1,$ var2,$ var3)转储变量,并且不必担心此函数之外的生产模式。一旦您关闭调试模式,就不会显示转储。
答案 1 :(得分:0)
您可以只调用函数(每行一行),而不是使用全局变量。
然后创建一个构建脚本,该脚本正在编译(因为这是PHP读取:放在一起)生产代码。该构建脚本只删除包含这些调用的所有行。
构建脚本也不会复制函数的定义。
然后对构建的生产代码运行验收和集成测试。由于现在缺少调试函数的定义,因此 会在调用时触发致命错误。整合和验收测试会注意到这些致命的错误。但是因为所有的调用都被剥离了,测试应该没有任何问题。