PHP'deki bir işlev içindeki işlev adını nasıl alabilirim?


235

Mümkün mü?

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

1
Sadece meraktan, ne zaman buna ihtiyaç var? Adını bilmediğiniz işlevler oluşturmak mümkün mü?
— DisgruntledGoat

37
Olası kullanımlardan biri yürütmenizi günlüğe kaydetmektir. "Bir hatayla karşılaştım" yazıyorsanız. Bir günlük dosyasına veya başka bir şeye FONKSİYON . Bu şekilde, işlev adı değiştirilirse, günlük mesajını değiştirmeyi hatırlayan kişi için endişelenmenize gerek kalmaz.
— Brian Ramsay

1
Giriş için buna ihtiyacınız var! sorduğun için teşekkürler :)
— SublymeRick

2
İşlev adını işlev içinde kullanmak istiyorsanız da yararlıdır (başka bir kullanım için). İşlevi vb. Temel alan bağlantılar oluşturmak gibi (örneğin: function name1()daha sonra içeride name1 kullanın ), birçok işlev için aynı şablona sahipseniz çok zaman kazanırsınız.
— Mafia

1
@DisgruntledGoat: işlevleri manuel olarak oluşturursanız ve her işlev için hata mesajını düzenlemek istemiyorsanız kullanışlıdır. Hata mesajına eklenmesi, daha az çalışmanız anlamına gelir.
— John Boe

Yanıtlar:


390

Doğru yol, __FUNCTION__ önceden tanımlanmış büyü sabitini kullanmaktır .

Misal:

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

Sonuç: MethodA.


6
FUNCTION sınıf dışı işlevler için de çalışır. PHP 7.0.8 üzerinde denendi.
— mvsagar

Aynı şekilde, sınıf adı nasıl alınır?
— Kiran Reddy

2
@KiranReddy bunun için de sihirli bir sabiti vardır: __CLASS__. Veya yapabilirsin get_class($this).
— Sean the Bean

1
PHP üzerinde denenmiş> = 4
— Nabi KAZ

98

Sen kullanabilirsiniz sihirli sabitleri __METHOD__ (sınıf adını içerir) ya da __FUNCTION__bir yöntem veya bir işlev ise bağlı (sadece işlev adı) ... =)


42
YÖNTEM sınıf adını içerir, FUNCTION tam da budur. İkincisi, bir sınıfın yönteminde eşit olarak mevcuttur.
— Alister Bulman

3
Bu doğru. Ancak methodName yerine MyClass :: methodName almak genellikle yararlıdır.
— PatrikAkerstrand

16

PHP 5 kullanıyorsanız bunu deneyebilirsiniz:

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

14
Bu inanılmaz bir kaynak yoğun. Kullanılması İŞLEVİ veya YÖNTEM çok daha verimlidir. Debug_backtrace () işlevi işlev adından daha fazlasına ihtiyacınız varsa harikadır.
— Luke Cousins

2
Bu amaçla debug_backtrace () kullanmak kötü bir uygulamadır
— Marcio Mazzucato

1
BU bulduğum tek doğru yoldur !!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!! !!!!!!!!!!!!!! çünkü __FUNCTION__üst işlev adını döndürür (geçerli işlev üst işleve dahil edildiğinde)
— T.Todua

5
@tazo todua. bir örnek verebilir misin?
— alds

2
<?php

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

Sonuç: "MethodA";


Bu kod snippet'i çözüm olsa da, bir açıklama da dahil olmak üzere mesajınızın kalitesini artırmaya yardımcı olur. Gelecekte okuyucular için soruyu cevapladığınızı ve bu kişilerin kod önerinizin nedenlerini bilmeyebileceğini unutmayın.
— SilverNak
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.