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.