PHP:ReflectionMethod :: invokeArgs() - 不完整的异常跟踪

时间:2016-08-26 09:49:14

标签: php exception reflection

我使用PHP的ReflectionMethod :: invokeArgs()来调用静态类方法。

被调用的方法可能会在代码中的不同位置抛出异常。

当抛出异常时,异常对象的跟踪以被调用方法的名称结束,我不知道实际抛出异常的那一行。

示例:

class A
{
    public static function methA()
    {
        $RC = new ReflectionClass('A');
        $M  = $RC->getMethod('methB');

        return $M->invokeArgs(null, ['arg']);
    }

    public static function methB($arg)
    {
        //some code
        throw new Exception('Exception thrown');
    }
}

try
{
    A::methA();
}
catch(Exception $e)
{
    print_r($e->getTraceAsString()[0]);
}

输出:

Array
(
    [function] => methB
    [class] => A
    [type] => ::
    [args] => Array
        (
            [0] => arg
        )

)

我想念的是抛出异常的文件/行。相反,最后一个条目只包含方法的名称。

有没有其他方法可以在不通过异常消息提供信息的情况下获取该信息?

1 个答案:

答案 0 :(得分:0)

您是否尝试Exception :: getFile()和Exception :: getLine()[doc]?

catch(Exception $e)
{
    print_r('in '.$e->getFile().' at line '.$e->getLine());
}