我(最近,很长一段时间后,当我想如何更好地、尽可能准确和描述性地发出异常警告)解决了 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
with arguments
(并已写入args
)或让跟踪项小写,默认情况下。
跟踪部分类和函数可以合并为方法。但这当然不是必需的。
示例来自我的 localhost 私人测试项目(您的文件名可能不同)。