gpt4 book ai didi

php - ErrorException 返回错误的文件和行

转载 作者:可可西里 更新时间:2023-10-31 23:23:14 24 4
gpt4 key购买 nike

在 file1.php 中:

set_error_handler('my_error_handler');
set_exception_handler('my_exception_handler');

function my_error_handler($errNo, $errStr, $errFile, $errLine, $whatever = null){
// here ErrFile and $errLine are correct only for native funcs...
throw New ErrorException($errStr, 0, $errNo, $errFile, $errLine);
}

function my_exception_handler($exception){
print $exception->getLine(); // correct only for native functions
print $exception->getFile(); // correct only for native functions
}

在 file2.php 中,一个示例函数定义:

function foo($requiredArg){

}

在 file3.php 中,调用 foo:

  foo();

产生:

Missing argument 1 for foo(), called in file3.php on line 2 and defined...

消息是正确的,但是当我尝试获取文件并使用 $exception->getFile()$exception->getLine() 时(在我的异常处理程序),我得到了定义 foo() 的文件和行,而不是它被调用的地方...

但是使用 native PHP 函数,我可以获得调用该函数的文件和行(这就是我想要的)。

最佳答案

它简单地归结为最接近的第一个。

当您使用核心或内置函数时,它们的定义包含在 PHP 的核心中。这意味着与用户定义的函数相比,函数的定义不可用,用户定义的函数的定义很容易获得。

如果您在引用您的用户的 exception_handler 函数中运行 debug_backtrace();$exception->getTrace(); - defined functions 的错误,你会先看到函数的定义,然后再看到函数的调用。如果您调用内部函数,您将只能看到调用行,因为 PHP 无法告诉您脚本或包含的文件中定义了内部函数的代码行,因为它是在核心中定义的。

这是错误处理的操作顺序。如果您想获得调用该函数的实际行,您可以查看跟踪并获取第二个数组对行号的引用。

关于php - ErrorException 返回错误的文件和行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11583758/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com