2010-07-22 4 views

답변

1

왜 필요한가요? 프로젝트 및 표준의 다른 코더에 대해 고려 사항이있는 경우 이 아닌 솔루션을 찾아이 호출 된 방법을 알 수 있도록 생성자에게 요구하십시오. 다른 모든 솔루션이 실패하면 정적 팩토리 메서드를 정의하고 생성자를 인스턴스화에 대한보다 많은 제어를 위해 비공개로 만듭니다.

0

debug_backtrace() 함수를 사용하지 않으려는 경우, 예외를 포착하여 역 추적을 얻을 수도 있습니다.

는하지만 어쨌든 ... 또한 추한 : 당신은 발신자가 필요한 이유

try 
{ 
    throw new Exception(); 
} 
catch(Exception $e) 
{ 
    print_r($e->getTrace()); 
} 

모르겠어요. 어쩌면 다른 논리를 사용하여이 문제를 해결할 수 있습니다.
그것은 역 추적을 받고보다 더해야 ...

편집

예외가 throw 할 필요가 없습니다. 그 부분을 유감스럽게 생각합니다.
그래서 당신은 간단하게 사용할 수 있습니다

$e = new Exception(); 
print_r($e->getTrace()); 

그러나 다시 한번, 당신이 사용할 필요가 없습니다!

+0

사용법은 다음과 같이 간단하게 사용하십시오 :'$ e = new Exception; $ e-> getTrace()'? 추적을하려면 던져 질 필요가 있습니까? – NikiC

+1

나는 그렇게 생각했다. 그러나 나는 방금 테스트를했고, 아니, 그것은 던져 질 필요가 없다. – Macmade

0

debug_backtrace() 없이는 얻을 수없는 것처럼 보입니다. 그래도이 기능을 만들 수 있습니다. manual에서 예 :

function get_caller_method() 
{ 
    $traces = debug_backtrace(); 

    if (isset($traces[2])) 
    { 
     return $traces[2]['function']; 
    } 

    return null; 
} 
0

가 느린/추한 debug_backtrace보다이 다른 일을하거나 생성자에 인자로 이름을 전달하는 자동적 인 방법은 없습니다 ....하지만 당신이 정말로이 건설되어서는 안된다 클래스에 대한 종속성의 종류.

관련 문제