PHP에서 현재 기능을 실행하는 코드 라인 및 파일을 가져오시겠습니까?
다음과 같은 상황이 있다고 상상해 보십시오.
파일1.php
<?php
include("Function.php");
log("test");
?>
기능.php
<?php
function log($msg)
{
echo "";
}
?>
로그 기능을 변경하여 다음을 생성하려고 합니다.
test (파일: File1.php, 회선번호: 3)
그렇다면, PHP에서 현재 기능을 실행한 코드의 파일 이름과 라인 번호를 얻을 수 있는 방법이 있을까요?
백로그 사용 코멘트 편집:객체 지향 프로그래밍 방식으로 백로그를 사용하면 다음과 같은 상황이 발생합니다.
Index.php
<?php
include("Logger.static.php");
include("TestClass.class.php");
new TestClass();
?>
TestClass.class.php
<?php
class TestClass
{
function __construct()
{
Logger::log("this is a test log message");
}
}
?>
Logger.static.php
<?php
class Logger
{
static public function log($msg)
{
$bt = debug_backtrace();
$caller = array_shift($bt);
echo $caller['file'];
echo $caller['line'];
}
}
?>
이 예에서는 파일 "Index.php"로 반환되며 행 번호4 로서 클래스가 시작됩니다.단, TestClass.class 파일을 반환해야 합니다.php 및 행 번호 6.이걸 어떻게 고칠지 알아?
debug_backtrace()를 사용할 수 있습니다.
http://us3.php.net/manual/en/function.debug-backtrace.php
따라서 로그 함수에서는 로그 함수가 호출된 파일 이름과 행 번호를 가져올 수 있습니다.
로그 클래스에서 이 방법을 사용하고 있기 때문에 의미 있는 로그 데이터를 취득하는 데 필요한 코드의 양이 대폭 감소했습니다.또 다른 장점은 가독성입니다.마법의 상수는 현과 섞이면 꽤 추해지는 경향이 있다.
다음은 간단한 예입니다.
function log($msg)
{
$bt = debug_backtrace();
$caller = array_shift($bt);
// echo $caller['file'];
// echo $caller['line'];
// do your logging stuff here.
}
debug_backtrace()를 사용하여 콜스택을 트레이스할 수 있습니다.속도가 느릴 수 있으니 로깅을 많이 하는 경우에는 주의해야 합니다.
만약 당신이 PHP 5.3을 사용한다면, 당신은 레이트 스태틱바인딩을 이용할 수 있고 기본 클래스 메서드는log()
자녀 클래스는 이를 호출할 수 있지만 여전히 에 대한 정적 참조를 유지할 수 있습니다.__FILE__
그리고.__LINE__
.
마지막 옵션은 그냥 통과입니다.__FILE__
그리고.__LINE__
를 호출할 때 파라미터로log()
기능.
이것은 오래된 질문이지만, 나의 솔루션이 여기에 없는 것을 생각하면, 나는 그것을 후세에 제공할 것이다.
try{
throw new Exception();
}catch ( Exception $e ){
$trace = $e->getTrace();
}
$length = 0;
foreach ($trace as $t){
if( $t['file'] != __FILE__ ){
break;
}
++$length;
}
return array_slice( $trace, ($length - count( $trace ) ));
깨끗한 스택트레이스를 취득하려면 , 이 파일이 격납되어 있는 최초의 행(통상은 에서 호출되고 있는 행)을 검색할 필요가 있습니다.트레이스의 인덱스를 알고 있는 경우 또는 함수를 사용할 수도 있습니다.
예외 스택 트레이스는 다음과 거의 같습니다.debug_backtrace(true)
.
언급URL : https://stackoverflow.com/questions/1252529/get-code-line-and-file-thats-executing-the-current-function-in-php
'programing' 카테고리의 다른 글
경고 하나 받아볼 수 있을까요? (0) | 2022.10.30 |
---|---|
MySQL/MariaDB에 저장 프로시저를 NULL 매개 변수 허용 안 함 (0) | 2022.10.30 |
다른 Ajax 내의 vue js가 데이터를 가져오지만 보기를 렌더링하지 않습니다. (0) | 2022.10.30 |
e. printStackTrace 등가 python (0) | 2022.10.30 |
문자열에 숫자만 포함되어 있는지 확인합니다. (0) | 2022.10.30 |