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 cliente. ¿O me estoy perdiendo el punto aquí por completo y debería hacerlo de otra manera? Cabe señalar que solo aceptaré una respuesta que no requiera que envíe el nombre de clase como argumento al método registerCallback.Cómo obtener el nombre de la clase de llamada (en PHP)
Erm, ambos métodos son métodos de instancia (no estáticos), por lo que si realmente necesita el nombre de la clase para otro fin, simplemente hacer eco de ella (es decir llamando a la devolución de llamada), debe proporcionar una instancia en lugar de un nombre de clase probablemente ... – Wrikken