2016-11-30 7 views
0

여기에있는 아이디어는 로깅 및 디버깅을위한 메소드를 작성하는 것으로, 해당 메소드를 관련 '마법 상수'로 전달할 필요가 없습니다.PHP 마술 상수를 함수 기본값으로 사용하는 방법이 있습니까?

효과적으로, 나는이 방법을 정의과 같이 사용하여 달성하기 위해 노력하고있어 :

function Debug($Message,$File=__FILE__,$Line=__LINE__) 
{ 
... 
} 

내가에서 실행하고 문제가 있음 나는 하나의 내가 아닌 다른 파일에 위의 방법을 정의하는 경우 오전 '디버깅'오전, 파일 및 줄을 파일에서 메서드가 정의 된보다는 오히려 내가 '디버깅'오전.

는 다음과 같은 파일 집합을 고려하십시오

Debugging.php을

<? 
function Debug($Message,$File=__FILE__,$Line=__LINE__) 
{ 
    echo("$File ($Line) :: $Message"); 
} 
?> 

Testing.php

<? 
Debug("Some message"); 
?> 

출력 :

Debugging.php (1) :: Some message 

때 messag의 호출 e는 두 번째 파일에서 발생했는데,이 시점에서 분명히 알 수 있듯이 의도 된 구현이 아닙니다. 나는 물론 호출 할 때 '디버그'메서드를 사용하여 마술 상수를 전달할 수 있지만 가능한 경우 불필요한 코드를 제거하려고합니다.

+0

이는 'debug_stack_trace'의 용도입니다. 왜 그걸 쓸 수 없니? – Machavity

+0

나는 메시지를 게시 할 때마다 그것을 파싱하는 사이클을 소비하고 싶다면 합리적인 해결책이라고 생각한다. – DigitalJedi805

답변

0

이렇게 debug_backtrace 기능을 사용하십시오.

function Debug($Message) 
{ 
    $backtrace = debug_backtrace(); 
    echo($backtrace[0]['file'] .'(' . $backtrace[0]['line'] . ') :: ' . $Message); 
}