Функция Caller в PHP 5?

Есть ли функция PHP, чтобы узнать имя функции вызывающего абонента в данной функции?

Solutions Collecting From Web of "Функция Caller в PHP 5?"

См. Debug_backtrace – это может проследить ваш стек вызовов до самого верха.

Вот как вы получите своего звонящего:

$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 на ubuntu, лучший способ

 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

Я просто хотел сказать, что способ flori не будет работать как функция, потому что он всегда будет возвращать имя вызываемой функции вместо вызывающего, но у меня нет репутации для комментариев. Я сделал очень простую функцию, основанную на ответе Флори, который отлично подходит для моего случая:

 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.. } 

Я сделал небольшое расширение для Zend_Log, теперь он показывает класс / метод / строку, из которой вызывается журнал. См. Здесь 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'];