Як отримати ім'я функції всередині функції в PHP?


235

Це можливо?

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

1
Лише з цікавості, коли в цьому є потреба? Чи можливо створити функції, яким ви не знаєте імені?
НезадоволенняЗачеплення

37
Одне з можливих застосувань - це реєстрація вашого виконання. Якщо ви пишете "У мене сталася помилка". ФУНКЦІЯ до логічного файлу чи чогось іншого. Таким чином, якщо ім’я функції буде змінено, вам не доведеться турбуватися про те, що людина пам’ятає змінити повідомлення журналу.
Брайан Рамсей

1
Потрібно це для ведення лісу! дякую за запитання :)
SublymeRick

2
Також корисно, якщо ви хочете використовувати ім'я функції всередині функції (для іншого використання). Як і побудувати посилання на основі функції тощо (наприклад: function name1()потім знову використовувати ім'я1 всередині), це дозволить заощадити багато часу, якщо у вас є той самий шаблон для безлічі функцій.
Мафія

1
@DisgruntledGoat: корисно, якщо ви створюєте функції вручну і не хочете редагувати повідомлення про помилку для кожної функції. Додавання його до повідомлення про помилку означає, що у вас менше роботи.
Джон Бое

Відповіді:


390

Точний спосіб - використовувати __FUNCTION__ заздалегідь задану магічну константу .

Приклад:

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

Результат: MethodA.


6
FUNCTION працює і для некласових функцій. Пробував на PHP 7.0.8.
mvsagar

Таким же чином, як отримати назву класу?
Кіран Редді

2
@KiranReddy Там є постійна магія для цього теж: __CLASS__. Або ви можете зробити get_class($this).
Шон Бін

1
Пробував на PHP> = 4
Набі КАЗ

98

Ви можете використовувати магічні константи __METHOD__ (включає ім’я класу) або __FUNCTION__(просто ім'я функції) залежно від того, чи це метод чи функція ... =)


42
METHOD включає назву класу, FUNCTION - саме це. Останнє однаково доступне в методі класу.
Алістер Бульман

3
Це правда. Але часто корисно отримати MyClass :: methodName замість methodName.
PatrikAkerstrand

16

Якщо ви використовуєте PHP 5, ви можете спробувати це:

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

14
Це неймовірно багато ресурсів. Використання функції FUNCTION або METHOD набагато ефективніше. debug_backtrace () чудово, якщо вам потрібно більше, ніж просто ім'я функції.
Люк Кузен

2
Погана практика використовувати для цієї мети debug_backtrace ()
Marcio Mazzucato

1
ЦЕ САМО ПРАВИЛЬНИЙ ШЛЯХ я знайшов !!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!! !!!!!!!!!!!!!! тому що __FUNCTION__повертає ім'я батьківської функції (коли поточна функція включена у батьківську функцію)
Т.Тодуа,

5
@tazo todua. ви можете навести приклад?
alds

2
<?php

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

Результат: "МетодA";


Хоча цей фрагмент коду може бути вирішенням, включаючи пояснення, справді допомагає покращити якість вашої публікації. Пам'ятайте, що ви відповідаєте на запитання читачів у майбутньому, і ці люди можуть не знати причини вашої пропозиції щодо коду.
SilverNak
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.