2010-03-19 5 views
1

이 바로 가기 수있는 방법이 있나요 이론적 인 예제),하지만 내 코드를 단축 할 방법을 찾을 수 없습니다. 함수를 사용하여 내 라인을 가져 오는 경우 함수가 호출 된 곳의 라인이 아닌 라인을 가져옵니다.동적 액세스 마법 상수

내 로그에 내가 함수가 호출 된 곳에서 알 필요가 로그 파일에 직접 인쇄하지만, 함수를 호출하는 데는 보통, 그래서 나는이 같은 인쇄 할 basename(__FILE__).'::'.__FUNCTION__.'()::'.__LINE__를 사용

index.php::b()::6 

를이 다른 파일에 500 개 이상의 함수가있을 때 많은 코드입니다. 이 작업을 수행하는 단축 또는 더 좋은 방법이 있습니까?

+0

은 로깅 오류에 대한이 무엇입니까? – Gordon

+0

info (사용자가 수행하는 작업, 응용 프로그램을 변경하는 경우), 디버그 메시지 (디버그가 ON 인 경우), 경고 및 오류 등 모든 정보를 기록합니다. –

+1

여기를 참조하십시오. http://stackoverflow.com/questions/1252529/get-code-line-and-file-thats-executing-the-current-function-in-php – Gordon

답변

1

debug_backtrace()는 도움이 될 것입니다. 성능에 어떤 영향을 주는지 잘 모르겠지만 잘라내는 모든 로그를 호출 할 것입니다. 이것을 시도하십시오 :

function cut_log() { 
    $trace = debug_backtrace(); 
    echo basename($trace[1]['file']) . '::' . $trace[1]['function'] 
     . '::' . $trace[1]['line']; 
} 

function a() { 
    cut_log(); 
} 

a(); 
+0

프로덕션 코드에서 원하지 않습니다. – Gordon

+0

@Gordon'debug_backtrace'는 많은 오버 헤드를 추가하지 않습니다. 나는 그것이 작동한다면, 그것을 사용한다고 말하고 싶습니다. – mattbasta

+0

@mattbasta 그것은 오버 헤드가 아니라 원칙적으로입니다. 이것은 주로 오류 처리에 사용되는 디버그 기능입니다. 디버깅 및 로깅이 아닌 경우 호출자 객체에 대한 정보를 얻는 데 오용해서는 안됩니다. http://stackoverflow.com/questions/346703/php-debug-backtrace-in-production-code 및 http://www.mail-archive.com/[email protected]/msg43737.html – Gordon

0

어 .. 나는 당신이 eval과 그 상수를 가지고 그렇게 할 수 있다고 생각합니다.

define("__myLocation__", "''.basename(__FILE__).'::'.__FUNCTION__.'()::'.__LINE__.''"); 
function a($where){ 
    echo $where; 
} 

function b(){ 
    a(eval(__myLocation__)); 
} 

하지만 실제로는 eval을 사용해서는 안됩니다.