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
sollte Admin oder Client sein. Oder verpasse ich den Punkt hier völlig und sollte das anders gehen? Es sollte angemerkt werden, dass ich nur eine Antwort akzeptiere, die nicht erfordert, dass ich den Klassennamen als Argument an die registerCallback-Methode sende.So erhalten Sie den Namen der aufrufenden Klasse (in PHP)
Erm, beide Methoden sind Instanzmethoden (nicht Statik), also wenn Sie wirklich brauchen Klassenname für einen anderen Zweck dann nur Echo (d. h. Callback), Sie müssen eine Instanz und dann wahrscheinlich einen Klassennamen angeben ... – Wrikken