异常情况中回溯缺少参数信息

3
当我运行http://us2.php.net/manual/en/exception.gettrace.php上的示例代码时,回溯中没有"args",这与示例输出不同。这是PHP的bug还是我漏掉了什么?我的输出如下:array(1) { [0]=> array(3) { ["file"]=> string(25) "D:\www\project\index.php" ["line"]=> int(79) ["function"]=> string(4) "test" } } 我正在运行PHP 5.2.8。编辑:示例输出来自于运行PHP官网的示例代码,无论是否向函数传递参数。

你能插入抛出异常的代码吗? - Neel
@Znarkus 请再次阅读问题,使用的代码是由OP链接的示例页面上的代码。 - jakeisonline
如果你向函数传递参数会发生什么? - NDM
是的,这个代码是从php.net上的示例代码。如果我传递参数给函数,什么也不会发生,我仍然会得到上面的输出。 - Markus Hedlund
3个回答

2

嗯,很奇怪。

但是以下内容(一个类)确实有效... 但即使您将其重载为普通函数,它仍应该给出参数。

<?php
class Test{
    function __construct($arg){
        $this->test($arg);
    }
    function test($args) {
     throw new Exception;
    }
}

try {
    new Test('Yar');
} catch(Exception $e) {
//print_r(debug_backtrace());
 var_dump($e->getTrace());
}
?>

1

我刚在我的本地安装上尝试了一下,它似乎按照宣传的那样工作,尽管我目前正在运行5.3版本...

即使没有传递任何参数,它仍应该至少返回一个空数组...

尝试在特定PHP版本上搜索错误,请搜索php.net bug tracker


0
我尝试升级到PHP 5.2.9(XAMPP 1.7.1),但它没有生效。但是当我在运行PHP 5.2.11的Linux环境下尝试时,它就生效了。我在下面发布了完整的测试代码。
<?php

error_reporting(E_ALL | E_STRICT);
header('Content-type: text/plain; charset=utf-8');

function a($a) {
    throw new Exception2('EXCEPTION MESSAGE');
}

function b($b) {
    a($b);
}

try {
    b('THIS PARAMETER SHOULD SHOW UP');
} catch(Exception $e) {
    var_dump($e);
}


class Exception2 extends Exception
{
    public function __construct()
    {
        $args = func_get_args();
        call_user_func_array(array($this, 'parent::__construct'), $args);

        var_dump(debug_backtrace());
    }
}

感谢您的所有帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接