PHP의 함수 안에서 함수 이름을 어떻게 얻습니까?


235

가능합니까?

function test()
{
  echo "function name is test";
}

1
호기심 때문에 언제 필요할까요? 이름을 모르는 함수를 만들 수 있습니까?
— Disgruntled 염소

37
하나의 가능한 용도는 실행을 기록하는 것입니다. "에 오류가 있습니다"라고 쓰고 있다면 로그 파일 또는 다른 기능 . 이런 식으로, 기능 이름이 변경되면 로그 메시지 변경을 기억하는 사람에 대해 걱정할 필요가 없습니다.
— Brian Ramsay

1
로깅에 필요했습니다! 물어 주셔서 감사합니다 :)
— SublymeRick

2
함수 내에서 함수 이름을 사용하려는 경우에도 유용합니다 (다른 용도로). 함수 등을 기반으로 링크를 구성하는 등 (예 : 내부에서 name1을 다시 function name1()사용 ) 많은 함수에 대해 동일한 템플릿이 있으면 많은 시간을 절약 할 수 있습니다.
— Mafia

1
@DisgruntledGoat : 함수를 수동으로 작성하고 모든 함수에 대한 오류 메시지를 편집하지 않으려는 경우에 유용합니다. 오류 메시지에 추가하면 작업이 줄어 듭니다.
— John Boe

답변:


390

정확한 방법은 __FUNCTION__ 미리 정의 된 매직 상수 를 사용하는 것 입니다.

예:

class Test {
    function MethodA(){
        echo __FUNCTION__;
    }
}

결과 : MethodA.


6
FUNCTION 은 비 클래스 함수에서도 작동합니다. PHP 7.0.8에서 시도했습니다.
— mvsagar

같은 방법으로 클래스 이름을 얻는 방법?
— Kiran Reddy

2
@KiranReddy 이것에도 마법 상수가 있습니다 : __CLASS__. 아니면 할 수 있습니다 get_class($this).
— 숀 더 빈

1
PHP에서 시도> = 4
— Nabi KAZ

98

메소드 또는 함수인지에 따라 매직 상수 __METHOD__ (클래스 이름 포함) 또는 __FUNCTION__(함수 함수 이름)을 사용할 수 있습니다 ... =)


42
METHOD 에는 클래스 이름이 포함되어 있으며 FUNCTION 은 바로 그 것입니다. 후자는 클래스의 메소드에서 동일하게 사용할 수 있습니다.
— Alister Bulman

3
사실입니다. 그러나 methodName 대신 MyClass :: methodName을 얻는 것이 종종 유용합니다.
— PatrikAkerstrand

16

PHP 5를 사용하는 경우 다음을 시도하십시오.

function a() {
    $trace = debug_backtrace();
    echo $trace[0]["function"];
}

14
이것은 엄청난 자원 집약적입니다. FUNCTION 또는 METHOD를 사용하는 것이 훨씬 더 효율적입니다. 함수 이름 이상이 필요한 경우 debug_backtrace ()가 좋습니다.
— Luke Cousins

2
이 목적으로 debug_backtrace ()를 사용하는 것은 나쁜 습관입니다.
— Marcio Mazzucato

1
이는 IS ONLY CORRECT WAY 제가 발견 !!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!! !!!!!!!!!!!!!! __FUNCTION__부모 함수 이름을 반환 하기 때문에 (현재 함수가 부모 함수에 포함 된 경우)
— T.Todua

5
@tazo todua. 예를 들어 줄 수 있습니까?
— alds

2
<?php

  class Test {
     function MethodA(){
         echo __FUNCTION__ ;
     }
 }
 $test = new Test;
 echo $test->MethodA();
?>

결과 : "MethodA";


이 코드 스 니펫이 해결책이 될 수 있지만 설명을 포함하면 게시물의 품질을 향상시키는 데 실제로 도움이됩니다. 앞으로 독자에게 질문에 대한 답변을 제공하고 있으며 해당 사람들이 코드 제안의 이유를 모를 수도 있습니다.
— SilverNak
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.