2009-06-17 4 views
184

क्या यह संभव है?मैं PHP में फ़ंक्शन के अंदर फ़ंक्शन नाम कैसे प्राप्त करूं?

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

जिज्ञासा से बाहर, इसकी आवश्यकता कब है? क्या उन कार्यों को बनाना संभव है जिन्हें आप नाम नहीं जानते? – DisgruntledGoat

+30

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

+1

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

उत्तर

306

यह एक बहुत ही सटीक तरीका है। फंक्शन http://www.php.net/manual/en/language.constants.predefined.php

उदाहरण:

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

परिणाम: "MethodA";

+0

__FUNCTION__ गैर-वर्ग कार्यों के लिए भी काम करता है। PHP 7.0.8 पर कोशिश की। – mvsagar

85

आप magic constants__METHOD__ (वर्ग के नाम भी शामिल है) का उपयोग कर सकते या __FUNCTION__ (सिर्फ नाम से काम) पर अगर यह एक विधि या एक समारोह है निर्भर करता है ... =)

+38

__METHOD__ में कक्षा का नाम शामिल है, __FUNCTION__ बस यही है। उत्तरार्द्ध एक वर्ग की विधि में समान रूप से उपलब्ध है। –

+3

यह सच है। लेकिन यह विधि नाम के बजाय MyClass :: methodName प्राप्त करने में अक्सर उपयोगी होता है। – PatrikAkerstrand

+6

+1, '__METHOD__'' __FUNCTION__' से अधिक विशिष्ट है। – l0b0

13

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

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

यह अविश्वसनीय संसाधन गहन है। __FUNCTION__ या __METHOD__ का उपयोग करना अधिक कुशल है। debug_backtrace() बहुत अच्छा है यदि आपको केवल फ़ंक्शन नाम से अधिक की आवश्यकता है। –

+1

इस उद्देश्य के लिए debug_backtrace() का उपयोग करने के लिए यह एक बुरा अभ्यास है –

+1

यह ** केवल सही तरीका ** मुझे मिला है !!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!! !!!!!!!!!!!!!! क्योंकि '__FUNCTION__' पेरेंट फ़ंक्शन नाम देता है (जब वर्तमान फ़ंक्शन पैरेंट फ़ंक्शन में शामिल होता है) –