2016-08-26 3 views
0

PHP의 ReflectionMethod :: invokeArgs()를 사용하여 정적 클래스 메서드를 호출합니다.PHP : ReflectionMethod :: invokeArgs() - 완료되지 않은 예외 추적

호출 된 메서드는 코드의 다른 위치에 예외를 throw 할 수 있습니다.

예외가 throw 될 때 예외 개체의 추적은 호출 된 메서드의 이름으로 끝나며 예외가 실제로 throw 된 줄을 알 수 없습니다.

예 :

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 
     ) 

) 

내가 그리워하는 것은 예외가 발생 된 파일/라인입니다. 대신 마지막 항목에는 메서드 이름 만 포함됩니다.

예외 메시지를 통해 정보를 제공하지 않으면 해당 정보를 얻을 수있는 다른 방법이 있습니까?

답변

0

Exception :: getFile() 및 Exception :: getLine()을 시도합니까 [doc]?

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