Допустим, у меня есть:
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();