Найти имя класса вызывающей функции в php

Допустим, у меня есть:

class Zebra{ public static function action(){ print 'I was called from the '.get_class().' class'; // How do I get water here? } } class Water{ public static function drink(){ Zebra::action(); } } Water::drink(); 

Как получить «воду» из класса зебры?

(Это для php 5.3)

Одно не очень хорошее решение: используйте __METHOD__ или __FUNCTION__ или __CLASS__ . и передать его как параметр вызываемой функции. http://codepad.org/AVG0Taq7

 <?php class Zebra{ public static function action($source){ print 'I was called from the '.$source.' class'; // How do I get water here? } } class Water{ public static function drink(){ Zebra::action(__CLASS__); } } Water::drink(); ?> 

Вы можете получить информацию о вызывающем debug_backtrace от debug_backtrace http://php.net/manual/en/function.debug-backtrace.php

Полнофункциональное решение с использованием исключения, но не debug_backtrace, не нужно изменять какой-либо прототип:

 function getRealCallClass($functionName) { try { throw new exception(); } catch(exception $e) { $trace = $e->getTrace(); $bInfunction = false; foreach($trace as $trace_piece) { if ($trace_piece['function'] == $functionName) { if (!$bInfunction) $bInfunction = true; } elseif($bInfunction) //found !!! { return $trace_piece['class']; } } } } class Zebra{ public static function action(){ print 'I was called from the '.getRealCallClass(__FUNCTION__).' class'; } } class Water{ public static function drink(){ Zebra::action(); } } Water::drink();