Z ciekawości, kiedy jest to potrzebne? Czy można tworzyć funkcje, których nazwy nie znasz?
DisgruntledGoat
37
Jednym z możliwych zastosowań byłoby zarejestrowanie wykonania. Jeśli piszesz „Wystąpił błąd w”. FUNKCJA do pliku dziennika lub czegoś takiego. W ten sposób, jeśli nazwa funkcji zostanie zmieniona, nie musisz się martwić, że osoba pamięta o zmianie komunikatu w dzienniku.
Brian Ramsay,
1
Potrzebowałem tego do logowania! dzięki za pytanie :)
SublymeRick
2
Przydatny również, jeśli chcesz użyć nazwy funkcji wewnątrz funkcji (do innego użytku). Podobnie jak w przypadku konstruowania łączy na podstawie funkcji itp. (Np .: function name1()użyj nazwy1 ponownie w środku), zaoszczędziłbyś dużo czasu, jeśli masz ten sam szablon dla wielu funkcji.
Mafia
1
@DisgruntledGoat: przydaje się, jeśli tworzysz funkcje ręcznie i nie chcesz edytować komunikatu o błędzie dla każdej funkcji. Dodanie go do komunikatu o błędzie oznacza, że masz mniej pracy.
FUNKCJA działa również w przypadku funkcji nieklasowych. Próbowałem na PHP 7.0.8.
mvsagar
W ten sam sposób, jak zdobyć nazwę klasy?
Kiran Reddy,
2
@KiranReddy Jest stałym magia za które też: __CLASS__. Lub możesz to zrobić get_class($this).
Sean the Bean
1
Próbowałem na PHP> = 4
Nabi KAZ
98
Możesz użyć magicznych stałych__METHOD__ (obejmuje nazwę klasy) lub __FUNCTION__(po prostu nazwę funkcji) w zależności od tego, czy jest to metoda, czy funkcja ... =)
Jest to niezwykle wymagające pod względem zasobów. Korzystanie z FUNKCJI lub METODY jest znacznie wydajniejsze. debug_backtrace () jest świetny, jeśli potrzebujesz czegoś więcej niż tylko nazwy funkcji.
Luke Cousins
2
Używanie w tym celu debug_backtrace () jest złą praktyką
Marcio Mazzucato,
1
TO JEDYNY PRAWIDŁOWY SPOSÓB , jaki znalazłem !!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!! !!!!!!!!!!!!!! ponieważ __FUNCTION__zwraca nazwę funkcji nadrzędnej (gdy bieżąca funkcja jest zawarta w funkcji nadrzędnej)
Ten fragment kodu może być rozwiązaniem, ale wyjaśnienie naprawdę pomaga poprawić jakość posta. Pamiętaj, że w przyszłości odpowiadasz na pytanie dla czytelników, a ci ludzie mogą nie znać przyczyn Twojej sugestii kodu.
function name1()
użyj nazwy1 ponownie w środku), zaoszczędziłbyś dużo czasu, jeśli masz ten sam szablon dla wielu funkcji.Odpowiedzi:
Dokładnym sposobem jest użycie
__FUNCTION__
predefiniowanej stałej magicznej .Przykład:
Rezultat:
MethodA
.źródło
__CLASS__
. Lub możesz to zrobićget_class($this)
.Możesz użyć magicznych stałych
__METHOD__
(obejmuje nazwę klasy) lub__FUNCTION__
(po prostu nazwę funkcji) w zależności od tego, czy jest to metoda, czy funkcja ... =)źródło
Jeśli używasz PHP 5, możesz spróbować:
źródło
__FUNCTION__
zwraca nazwę funkcji nadrzędnej (gdy bieżąca funkcja jest zawarta w funkcji nadrzędnej)Wynik: „MethodA”;
źródło