我(最近,在我思考如何更好、尽可能准确和描述性地发出异常警告之后)通过以下(可能不完美,但仍然可用)方法解决了 getTrace 报告不完整的问题:
private function Create_TraceText()
{
$trace_text = "<b>TRACE:</b> <br /><br />\n";
$trace = $this -> getTrace();
for($index = 0; $index < count($trace); $index++)
{
$trace_text .= 'STEP ' . ($index + 1) . ":<br />\n";
foreach($trace[$index] as $trace_name => $trace_value)
{
$trace_value = $this -> Convert_StringifyEmpty($trace_value);
$trace_value = $this -> Convert_StringifyNull($trace_value);
$trace_value = $this -> Convert_StringifyArray($trace_value);
$trace_text .= strtoupper($trace_name == 'args' ? 'arguments' : $trace_name) . ': ' . $trace_value . "<br />\n";
}
$trace_text .= "<br />\n";
}
return $trace_text;
}
方法Create_TraceText 调用(也是)我自己的三个其他方法。这些方法有以下目的:
- 在未设置参数的情况下插入替代文本
- 用 NULL 字符串替换 NULL 值
- 将参数的数组转换成字符串(用逗号作为胶水)
- 让代码更易读
我选择了私有可访问性,因为它是由处理报告组装的方法在内部调用的。但是,如果您愿意,可以将其公开。
它遍历跟踪,获取每个步骤的项目(键和它们的值)并将它们转换为下面写的形式的字符串
TRACE:
STEP 1:
FILE: A:\WWW\Kilometrovnik\Kilometrovnik.php
LINE: 166
FUNCTION: Execute
CLASS: VMaX\MarC\Assemblers\CodeGenerator
TYPE: ->
ARGUMENTS: not defined
上面的例子只有一个步骤,但如果跟踪需要,它可以重复(自动完成)。
注意:
当然可以直接使用getTrace方法。我选择了当前的方式来支持使代码更具可读性(并且可能更快 - 如果方法 getTrace 仅使用一次)。
此外,如果您愿意,您可以删除将 args 替换为 arguments(并已写入 args)或将跟踪项设为小写,默认情况下。
跟踪部分类和函数可以合并为方法。但当然不是必须的。
示例来自我的localhost私测项目(你的文件名可能不同)。