दिलचस्प पोस्ट
मैं एक महीने के आखिरी दिन कैसे प्राप्त करूं? AngularJS: सर्वर साइड सत्यापन के साथ एकीकरण jQuery सेट चुनें सूचकांक सी ++ में क्यों आंतरिक संबंध होता है, जब यह सी में नहीं होता है? सीएसएस क्या हैं -मोज़- और -विबिट-? पायथन में% s के बजाय% r का उपयोग कब करना है? XCode 6 स्विफ्ट में स्वत: पूर्ण नहीं है मैं एक एकल उद्धरण से कैसे बच सकता हूं? सरलतम / क्लीननेट को जावास्क्रिप्ट में कार्यान्वित करने के लिए सबसे सरल तरीका है? कैसे गूंज और PHP में अलग प्रिंट? जावा कतार लागूकरण, जो एक? गतिशील रूप से सम्मिलित सामग्री पर शैलियों / थीम का पुन: मूल्यांकन करने के लिए jQuery के मोबाइल को बाध्य करना परिशुद्धता के संभावित नुकसान के लिए भिन्न व्यवहार git छिपाने की जगह और आवेदन एंड्रॉइड: configChanges = "अभिविन्यास" टुकड़ों के साथ काम नहीं करता है

PHP 5 में कॉलर फ़ंक्शन?

क्या किसी फ़ंक्शन में कॉलर फ़ंक्शन का नाम जानने के लिए एक PHP फ़ंक्शन है?

वेब के समाधान से एकत्रित समाधान "PHP 5 में कॉलर फ़ंक्शन?"

डीबग_बैकट्रेस देखें – यह आपकी कॉल स्टैक को शीर्ष पर पूरी तरह से पता लगा सकता है।

यहां बताया गया है कि आप अपने कॉलर को कैसे प्राप्त करेंगे:

$trace = debug_backtrace(); $caller = $trace[1]; echo "Called by {$caller['function']}"; if (isset($caller['class'])) echo " in {$caller['class']}"; 

Xdebug कुछ अच्छा कार्य प्रदान करता है

 <?php Class MyClass { function __construct(){ $this->callee(); } function callee() { echo sprintf("callee() called @ %s: %s from %s::%s", xdebug_call_file(), xdebug_call_line(), xdebug_call_class(), xdebug_call_function() ); } } $rollDebug = new MyClass(); ?> 

ट्रेसे वापस लौटाएगा

 callee() called @ /var/www/xd.php: 16 from MyClass::__construct 

सबसे अच्छा तरीका है उबुंटू पर Xdebug को स्थापित करने के लिए

 sudo aptitude install php5-xdebug 

आपको पहले php5-dev को स्थापित करने की आवश्यकता हो सकती है

 sudo aptitude install php5-dev 

और जानकारी

debug_backtrace() वर्तमान कॉल स्टैक में पैरामीटर, फ़ंक्शन / विधि कॉल के विवरण की आपूर्ति करता है।

यह बहुत देर हो चुकी है लेकिन मैं उस समारोह को साझा करना चाहूंगा जो कि समारोह का नाम देगा, जिसमें से वर्तमान फ़ंक्शन को कहा जाता है।

 public function getCallingFunctionName($completeTrace=false) { $trace=debug_backtrace(); if($completeTrace) { $str = ''; foreach($trace as $caller) { $str .= " -- Called by {$caller['function']}"; if (isset($caller['class'])) $str .= " From Class {$caller['class']}"; } } else { $caller=$trace[2]; $str = "Called by {$caller['function']}"; if (isset($caller['class'])) $str .= " From Class {$caller['class']}"; } return $str; } 

मुझे उम्मीद है कि यह उपयोगी होगा

इसे बनाया और खुद को इस का उपयोग कर

 /** * Gets the caller of the function where this function is called from * @param string what to return? (Leave empty to get all, or specify: "class", "function", "line", "class", etc.) - options see: http://php.net/manual/en/function.debug-backtrace.php */ function getCaller($what = NULL) { $trace = debug_backtrace(); $previousCall = $trace[2]; // 0 is this call, 1 is call in previous function, 2 is caller of that function if(isset($what)) { return $previousCall[$what]; } else { return $previousCall; } } 
 echo debug_backtrace()[1]['function']; 

PHP 5.4 से काम करता है

या ऑप्टिमाइज्ड (गैर-डीबग उपयोग मामलों के लिए उदाहरण):

 echo debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS, 2)[1]['function']; 

पहला तर्क अप्रयुक्त फ़ंक्शन तर्कों को पॉप्युलेट करने के लिए रोकता है, दूसरी सीमा को दो स्तरों पर ट्रेस (हमें दूसरे की आवश्यकता है)।

आप इस जानकारी को debug_backtrace द्वारा लौटाए गए सरणी से निकाल सकते हैं

मैं यह बताना चाहता हूं कि फ्लोरी का तरीका फ़ंक्शन के रूप में काम नहीं करेगा क्योंकि यह कॉलर के बजाय हमेशा फ़ंक्शन नाम वापस करेगा, लेकिन मुझे टिप्पणी करने के लिए प्रतिष्ठा नहीं है मैंने फ्लोरी के उत्तर के आधार पर एक बहुत सरल कार्य किया जो मेरे मामले के लिए ठीक काम करता है:

 class basicFunctions{ public function getCallerFunction(){ return debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS, 3)[2]['function']; } } 

उदाहरण:

 function a($authorisedFunctionsList = array("b")){ $ref = new basicFunctions; $caller = $ref->getCallerFunction(); if(in_array($caller,$authorisedFunctionsList)): echo "Welcome!"; return true; else: echo "Unauthorised caller!"; return false; endif; } function b(){ $executionContinues = $this->a(); $executionContinues or exit; //Do something else.. } 

मैंने ज़ेंड_ओॉग के लिए एक छोटा सा एक्सटेंशन बनाया है, अब यह क्लास / विधि / लाइन दिखाती है जहां से लॉगर को बुलाया गया था यहां देखें http://mikebevz.com/2010/08/logger-with-caller-class-based-on-zend_log/

यह मेरे लिए सबसे अच्छा काम करता है: var_dump(debug_backtrace());

असल में मुझे लगता है कि debug_print_backtrace () आपके लिए क्या आवश्यक है http://php.net/manual/en/function.debug-print-backtrace.php

यह काम करना चाहिए:

 $caller = next(debug_backtrace())['function'];