2011-01-28 8 views
0

함수 내부에서 함수가 호출되는 범위를 결정하는 방법이 있습니까? (또는 방법, 나는 나머지 게시물에서 의미하는 기능을 사용합니다.)PHP에서 호출 범위 결정

내가 싫어하는 것은 __FILE__ 또는 __CLASS__ 상수를 함수에 전달해야한다는 것입니다. 이 정보는 스택 트레이스 등에서 사용할 수 있으므로 어딘가에 떠 다니는 것을 알 수 있습니다.하지만 런타임에 예외를 던지지 않고 인트로 스펙 션하는 방법을 알고 싶습니다.

솔루션에 대한 성능 특성이있는 경우 해당 특성도 알고 싶습니다.

내가 관심이 사용 사례가 있습니다.

  1. 함수 호출을 시작한 클래스 유형을 결정
  2. 내 함수를 호출하는 파일/라인/기능 결정

기본적으로 내가 원하는 것은 다음과 같습니다.

class util 
{ 
    public static function checkScope() 
    { 
     echo $magic_scope_stuff; 
    } 

    public static function blah() 
    { 
     util::checkScope(); 
    } 
} 

util::checkScope(); // main, line 14 
util::blah(); // class util, line 9 
+2

가능한 복제본 [다른 클래스의 메소드를 호출 한 클래스를 찾으십시오.] (http://stackoverflow.com/questions/1214043/find-out-which-class-called-a-method-in-another- 클래스) – Gordon

+1

이 질문은 지금 당장 요청되며, 따라서 더 많은 중복이 있어야합니다. 그렇게 필사적으로 원하신다면,'debug_backtrace'를 남용하십시오. 그러나 일반적으로 그 필요성을 갖는 것은 디자인 냄새입니다. PHP에 이러한 기능을 구현하는 방법은 php.internals에서도 논의되고 거부되었습니다. http://marc.info/?l=php-internals&m=125313473914294&w=3 – Gordon

+1

@Gordon 독서 자료를 제공해 주셔서 감사합니다. – cbednarski

답변

3

debug_backtrace().

결과 배열은 debug_backtrace 호출까지 진입 점에서 호출 추적을 제공합니다.

+2

실제로'debug_backtrace'는 디버깅 중이며 호출자 범위를 얻지 못합니다. 하지만 그렇게 할 수는 있지만 응용 프로그램 흐름을 제어하는 ​​기능은 아닙니다. – Gordon

+0

@Gordon. 참된. 그것은 디버깅 정보를 검색하기위한 것입니다. 따라서 접두어. 나는 그것을 권장하지 않는다 (예외와 동일한 오버 헤드).하지만 흐름 제어에 사용할 수있다. –

+0

@Gordon 네, 그게 제가하려고했던 구별입니다. 감사. – cbednarski