Bagaimana cara mendapatkan nama fungsi di dalam suatu fungsi di PHP?

235

Apa itu mungkin?

function test()
{
  echo "function name is test";
}
Oh Tuhan
sumber
1
Hanya ingin tahu, kapan ada kebutuhan untuk ini? Apakah mungkin membuat fungsi yang Anda tidak tahu namanya?
DisgruntledGoat
37
Satu kemungkinan penggunaan adalah mencatat eksekusi Anda. Jika Anda menulis "Saya memiliki kesalahan". FUNGSI ke file log atau sesuatu. Dengan cara ini, jika nama fungsi diubah, Anda tidak perlu khawatir tentang orang yang ingat untuk mengubah pesan log.
Brian Ramsay
1
Membutuhkan ini untuk masuk! terima kasih sudah bertanya :)
SublymeRick
2
Juga berguna jika Anda ingin menggunakan nama fungsi di dalam fungsi (untuk penggunaan lain). Ingin membuat tautan berdasarkan fungsi, dll. (Mis: function name1()gunakan lagi name1 di dalam), akan menghemat banyak waktu jika Anda memiliki templat yang sama untuk banyak fungsi.
Mafia
1
@DisgruntledGoat: berguna jika Anda membuat fungsi secara manual dan tidak ingin mengedit pesan kesalahan untuk setiap fungsi. Menambahkannya ke pesan kesalahan berarti Anda memiliki lebih sedikit pekerjaan.
John Boe

Jawaban:

390

Cara yang akurat adalah dengan menggunakan __FUNCTION__ konstanta sihir yang telah ditentukan sebelumnya .

Contoh:

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

Hasil: MethodA.

Silfverstrom
sumber
6
FUNGSI berfungsi untuk fungsi non-kelas juga. Mencoba di PHP 7.0.8.
mvsagar
Cara yang sama, bagaimana cara mendapatkan nama kelas?
Kiran Reddy
2
@KiranReddy Ada konstan ajaib untuk itu juga: __CLASS__. Atau kamu bisa melakukannya get_class($this).
Sean the Bean
1
Mencoba di PHP> = 4
Nabi KAZ
98

Anda dapat menggunakan konstanta ajaib __METHOD__ (termasuk nama kelas) atau __FUNCTION__(hanya nama fungsi) tergantung pada apakah itu metode atau fungsi ... =)

PatrikAkerstrand
sumber
42
METODE termasuk nama kelas, FUNGSI hanyalah itu. Yang terakhir sama-sama tersedia dalam metode kelas.
Alister Bulman
3
Itu benar. Tetapi seringkali berguna untuk mendapatkan MyClass :: methodName alih-alih methodName.
PatrikAkerstrand
16

Jika Anda menggunakan PHP 5 Anda dapat mencoba ini:

function a() {
    $trace = debug_backtrace();
    echo $trace[0]["function"];
}
Kevin Newman
sumber
14
Ini adalah sumber daya yang luar biasa intensif. Menggunakan FUNGSI atau METODE jauh lebih efisien. debug_backtrace () bagus jika Anda membutuhkan lebih dari sekedar nama fungsi.
Luke Cousins
2
Ini adalah praktik yang buruk untuk menggunakan debug_backtrace () untuk tujuan ini
Marcio Mazzucato
1
INI CARA YANG HANYA BENAR yang saya temukan !!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!! !!!!!!!!!!!!!! karena __FUNCTION__mengembalikan nama fungsi induk (ketika fungsi saat ini termasuk dalam fungsi induk)
T.Todua
5
@tazo todua. dapatkah kamu memberi contoh
alds
2
<?php

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

Hasil: "MethodA";

Snehal K
sumber
Sementara cuplikan kode ini mungkin solusinya, termasuk penjelasan sangat membantu untuk meningkatkan kualitas posting Anda. Ingatlah bahwa Anda menjawab pertanyaan untuk pembaca di masa depan, dan orang-orang itu mungkin tidak tahu alasan untuk saran kode Anda.
SilverNak