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
deve essere admin o client. O mi manca il punto qui completamente e dovrei andare su questo altro modo? Va notato che accetterò solo una risposta che non richiede che invii il nome di classe come argomento al metodo registerCallback.Come ottenere il nome della classe chiamante (in PHP)
Erm, entrambi i metodi sono metodi di istanza (non statici), quindi se è davvero necessario il nome di classe per un altro scopo, quindi solo a farlo eco (ad es. chiamando il callback), devi fornire un'istanza piuttosto che un nome di classe probabilmente ... – Wrikken