在调试时,如果我可以退出()并使用foreach打印数组的各个元素,这将有所帮助。有什么想法吗?
答案 0 :(得分:2)
如果要轻松打印数组内容或任何其他PHP值,请使用var_dump
。调用exit()
与此正交,我认为写得非常清楚:
var_dump($arr);
exit(1);
另一种技术是记录输出,如果您不想筛选输出HTML以查找var_dump
的输出,则可能更有用:
error_log(var_export($arr));
exit(1);
答案 1 :(得分:1)
也许您可以使用print_r进行调试的调试退出函数(打印人类可读的变量版本)
function dexit($array, $status = 0) {
print_r($array);
exit($status);
}
然后,在代码中的任何地方,您都可以
dexit($array);
// or
dexit($array, 0);
但是以任何方式内联使用print_r并不困难:)
答案 2 :(得分:1)
听起来不是调试恕我直言的最理想方式,但这可以通过使用register_shutdown_function()来实现:
http://php.net/manual/en/function.register-shutdown-function.php
e.g:
function debug_print_array(){
global $array;
foreach($array as $key => $val){
echo "$key: $val\n";
}
}
register_shutdown_function('debug_print_array');
答案 3 :(得分:1)
试试这个,你有两个选项,debug或var_dump
function debug_exit($array, $type = 1) {
if ($type == 1) { print_r($array); }
if ($type == 2) { var_dump($array); }
exit();
}
答案 4 :(得分:0)
以下是我使用的内容x_r()
。跟踪来自PHP文档中的this example。跟踪的原因是您/其他人可以找到aprx通过哪个/ x_r()
进行调用。如果您需要在exit()
:
print_r()
是可选的
// Exits with a print_r and call trace for debugging
if (!function_exists('x_r')) {
function x_r($obj, $exit = true, $return = true) {
// echo the obj first
echo '<pre style="background: #FFFFFF;">', print_r($obj, $return), '</pre>';
// include a debug call trace
$e = new Exception();
$trace = explode("\n", $e->getTraceAsString());
// reverse array to make steps line up chronologically
$trace = array_reverse($trace);
array_shift($trace); // remove {main}
array_pop($trace); // remove call to this method
$length = count($trace);
$result = array();
for ($i = 0; $i < $length; $i++) {
$result[] = ($i + 1) . ')' . substr($trace[$i], strpos($trace[$i], ' ')); // replace '#someNum' with '$i)', set the right ordering
}
// echo call trace
echo '<pre style="background: #FFFFFF;">', print_r($result, $return), '</pre>';
if ($exit === true) {
exit();
}
}
}