PHP异常-getTrace将范围解析运算符(:)替换为对象运算符(->;)
我正在设计一个简单的异常处理程序,用于我的PHP项目。一直困扰我的问题之一是糟糕的堆栈跟踪,它会截断参数等。因此我决定使用PHP异常-getTrace将范围解析运算符(:)替换为对象运算符(->;),php,Php,我正在设计一个简单的异常处理程序,用于我的PHP项目。一直困扰我的问题之一是糟糕的堆栈跟踪,它会截断参数等。因此我决定使用getTrace()-方法以更有用的字符串解析数组。 这样做很好,但我注意到静态方法调用没有正确表示: getTrace(): #3 /system/session.php(38): Session->__construct() #2 /system/session.php(126): Session->instance() getTraceAssString(
getTrace()
-方法以更有用的字符串解析数组。这样做很好,但我注意到静态方法调用没有正确表示:
getTrace()
:
#3 /system/session.php(38): Session->__construct()
#2 /system/session.php(126): Session->instance()
getTraceAssString()
:
#1 /system/session.php(38): Session->__construct()
#2 /system/session.php(126): Session::instance()
…其中,会话
可能是这样的:
class Session(){
public static function instance(){}
public function __construct(){}
}
似乎作用域解析运算符(:
)被对象运算符(->
)替换,而不管发生什么情况,getTrace()
)
为什么会这样?我能做点什么吗?我缺少一个参数吗?找到了!使用时,你有时应该仔细阅读
原始答案使用sprintf()
将类替换为以下内容:
...
isset($frame['class']) ? $frame['class'] . '->' : '',
...
应在哪里:
...
isset($frame['class']) ? $frame['class'] . $frame['type'] : '',
...
找到了!使用时,你有时应该仔细阅读
原始答案使用sprintf()
将类替换为以下内容:
...
isset($frame['class']) ? $frame['class'] . '->' : '',
...
应在哪里:
...
isset($frame['class']) ? $frame['class'] . $frame['type'] : '',
...
这不会发生在我的系统PHP5.6.12上键入'=>string'::'(长度=2)`PS:类名后没有大括号;)隐马尔可夫模型。。它在我的托管服务器上运行,该服务器也使用5.6.12。。。PS:真实的东西是很好的PSR-1-ed;)调用
Exception::getTrace()
的完整输出是什么?对我来说,这是一个assoc数组的索引数组。从上面给出的示例来看,它看起来像一个普通字符串。谢谢,@m02ph3u5。让我走上正轨:)这不会发生在我的系统PHP5.6.12上键入'=>string'::'(长度=2)`PS:类名后没有大括号;)隐马尔可夫模型。。它在我的托管服务器上运行,该服务器也使用5.6.12。。。PS:真实的东西是很好的PSR-1-ed;)调用Exception::getTrace()
的完整输出是什么?对我来说,这是一个assoc数组的索引数组。从上面给出的示例来看,它看起来像一个普通字符串。谢谢,@m02ph3u5。让我走上正轨:)我猜你也应该将此作为注释或编辑添加到原始答案中。我猜你也应该将此作为注释或编辑添加到原始答案中。