variable valor recibir pasar instanciar example ejemplos codigo clases clase php class abstraction abstract

valor - Cómo obtener el nombre de la clase que llama(en PHP)



php class example (3)

define(''anActionType'', 1); $actionTypes = array(anActionType => ''anActionType''); class core { public $callbacks = array(); public $plugins = array(); public function __construct() { $this->plugins[] = new admin(); $this->plugins[] = new client(); } } abstract class plugin { public function registerCallback($callbackMethod, $onAction) { if (!isset($this->callbacks[$onAction])) $this->callbacks[$onAction] = array(); global $actionTypes; echo "Calling $callbackMethod in $callbacksClass because we got {$actionTypes[$onAction]}" . PHP_EOL; // How do I get $callbacksClass? $this->callbacks[$onAction][] = $callbackMethod; } } class admin extends plugin { public function __construct() { $this->registerCallback(''onTiny'', anActionType); } public function onTiny() { echo ''tinyAdmin''; } } class client extends plugin { public function __construct() { $this->registerCallback(''onTiny'', anActionType); } public function onTiny() { echo ''tinyClient''; } } $o = new core();

$callbacksClass debe ser admin o client. ¿O me estoy perdiendo el punto aquí por completo y debería hacerlo de otra manera? Se debe tener en cuenta que solo aceptaré una respuesta que no requiera que envíe el nombre de clase como un argumento al método registerCallback.


Realmente deberías hacer algo como:

$this->registerCallback(array($this, ''onTiny''), anActionType);

Así es como PHP trabaja con manejadores de métodos de objetos.


Si alguien vino aquí buscando la forma de obtener el nombre de una clase que llama de otra clase como lo hice yo, consulte https://gist.github.com/1122679

EDITAR: código pegado

function get_calling_class() { //get the trace $trace = debug_backtrace(); // Get the class that is asking for who awoke it $class = $trace[1][''class'']; // +1 to i cos we have to account for calling this function for ( $i=1; $i<count( $trace ); $i++ ) { if ( isset( $trace[$i] ) ) // is it set? if ( $class != $trace[$i][''class''] ) // is it a different class return $trace[$i][''class'']; } }

P.EJ

class A { function t() { echo get_calling_class(); } } class B { function x() { $a = new A; $a->t(); } } $b = new B; $b->x(); // prints B


Utilice get_class() :

$this->callbacks[$onAction][] = $callbackMethod; $className = get_class($this); // Call callback method $className->$callbackMethod();