मुझे PHP में किसी फ़ंक्शन के अंदर फ़ंक्शन नाम कैसे मिलता है?


235

क्या यह संभव है?

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

1
बस जिज्ञासा से बाहर, इस की आवश्यकता कब है? क्या उन कार्यों को बनाना संभव है जिन्हें आप के नाम से नहीं जानते हैं?
असंतुष्टगीत

37
एक संभावित उपयोग आपके निष्पादन को लॉग करेगा। यदि आप लिख रहे हैं "मुझे एक त्रुटि हुई"। एक लॉगफ़ाइल या कुछ करने के लिए समारोह । इस तरह, यदि फ़ंक्शन नाम बदल जाता है तो आपको लॉग संदेश बदलने के लिए याद रखने वाले व्यक्ति के बारे में चिंता करने की आवश्यकता नहीं है।
ब्रायन रामसे

1
लॉगिंग के लिए यह आवश्यक है! पूछने के लिए धन्यवाद :)
SublymeRick

2
यदि आप फ़ंक्शन के अंदर फ़ंक्शन नाम का उपयोग करना चाहते हैं, तो भी उपयोगी है (किसी अन्य उपयोग के लिए)। फ़ंक्शन के आधार पर लिंक का निर्माण करना पसंद है, इत्यादि (जैसे: function name1()इसके बाद name1 फिर से अंदर का उपयोग करें), यदि आपके पास बहुत सारे फ़ंक्शन के लिए समान टेम्पलेट है, तो बहुत समय बचाएगा।
माफिया

1
@DisgruntledGoat: यदि आप मैन्युअल रूप से फ़ंक्शन बनाते हैं और हर फ़ंक्शन के लिए त्रुटि संदेश संपादित नहीं करना चाहते हैं तो यह उपयोगी है। इसे त्रुटि संदेश में जोड़ने का मतलब है कि आपके पास काम कम है।
जॉन बोए

जवाबों:


390

सटीक तरीका __FUNCTION__ पूर्वनिर्धारित जादू निरंतर का उपयोग करना है

उदाहरण:

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

परिणाम: MethodA


6
गैर-श्रेणी के कार्यों के लिए भी फंक्शन काम करता है। PHP 7.0.8 पर कोशिश की गई।
मवसागर

उसी तरह, वर्ग नाम कैसे प्राप्त करें?
किरण रेड्डी

2
@KiranReddy उसके लिए भी एक जादू है __CLASS__। या आप कर सकते हैं get_class($this)
बीन

1
PHP> = 4 पर कोशिश की
नबी

98

आप जादू की स्थिरांक __METHOD__ (वर्ग का नाम भी शामिल है) या __FUNCTION__(सिर्फ फ़ंक्शन नाम) का उपयोग कर सकते हैं, यह इस बात पर निर्भर करता है कि क्या यह एक विधि या एक कार्य है ... =)


42
METHOD में क्लास का नाम शामिल है, FUNCTION बस यही है। उत्तरार्द्ध एक वर्ग की विधि में समान रूप से उपलब्ध है।
एलिस्टर बुलमैन

3
यह सच है। लेकिन यह अक्सर MyClass :: MethodName के बजाय MethodName प्राप्त करने के लिए उपयोगी है।
पेट्रीकस्ट्रैन्ड

16

यदि आप PHP 5 का उपयोग कर रहे हैं, तो आप यह कोशिश कर सकते हैं:

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

14
यह अविश्वसनीय संसाधन गहन है। FUNCTION या METHOD का उपयोग करना अधिक कुशल है। डिबग_बैकट्रेस () बढ़िया है अगर आपको केवल फ़ंक्शन नाम से अधिक की आवश्यकता है।
ल्यूक कजिन

2
इस उद्देश्य के लिए
debug_backtrace

1
यह केवल सही है, मैंने पाया है !!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!! !!!!!!!!!!!!!! क्योंकि __FUNCTION__रिटर्न पैरेंट फंक्शन का नाम (जब मौजूदा फंक्शन को पैरेंट फंक्शन में शामिल किया जाता है)
T.Todua

5
@ तज़ो तोदुआ क्या आप एक उदाहरण दे सकते हैं?
ALDS

2
<?php

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

परिणाम: "मेथोडा";


हालांकि यह कोड स्निपेट समाधान हो सकता है, जिसमें स्पष्टीकरण भी शामिल है , जो आपके पोस्ट की गुणवत्ता को बेहतर बनाने में मदद करता है। याद रखें कि आप भविष्य में पाठकों के लिए प्रश्न का उत्तर दे रहे हैं, और उन लोगों को आपके कोड सुझाव के कारणों का पता नहीं चल सकता है।
सिल्वरनक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.