Ceci est difficile. Je suis "émulant" ZF Bootstrapping (apparence de surface). Ne me demandez pas pourquoi, appelez ça un intérêt académique. J'ai donc un Bootstrap Abstract avec une méthode "run" qui se répète sur lui-même pour localiser les méthodes préfixées avec "init".Empêche l'invocation de la méthode d'instance X à partir du contexte! = Y
L'application recherche une classe définie par l'utilisateur qui étend cette classe, dans laquelle l'utilisateur peut définir n'importe quel nombre de méthodes de cette manière. Cependant, je veux empêcher l'utilisateur d'être capable d'exécuter la commande "run" de sa classe parente, tout en exposant la même commande pour le code client.
class Bootstrap_Abstract{
protected final function run(){
// if method exists that starts 'init' - execute the method
}
}
class Bootstrap extends Bootstrap_Abstract(){
public function initSomething(){
//do something
}
//PREVENT THIS
public function initRun(){
$this->run();
}
}
//application code, not exposed to user - changes in behaviour require changes in this code directly
class Application(){
$Bootstrap = new Bootstrap();//load user bootstrap
$Bootstrap->run();
}
Pouvez-vous élaborer un peu sur cette phrase: "Je veux empêcher l'utilisateur d'être en mesure d'exécuter la commande" run "de sa classe parente, tout en exposant le même commande pour le code client "? Je ne comprends pas très bien. – thetaiko
Connexe: [équivalent PHP d'ami ou interne] (http://stackoverflow.com/q/317835/212218) –