Zugreifen auf Elternvariablen im Kindkonstrukt, ohne die Aktion im Elternelement auszuführen

Ich gehe ziemlich wahrscheinlich in die falsche Richtung, aber ich kann nicht herausfinden, wie ich das korrigieren könnte … wäre toll, wenn mir jemand in die richtige Richtung zeigen könnte. Gerne stellen wir Ihnen bei Bedarf weitere Details zur Verfügung. Mein Problem ist wie folgt:

Ich habe eine Elternklasse, eine Kindklasse, die auf einige der Elternvariablen zugreifen muss, und eine Seite mit einem do_action-Aufruf wie folgt

/****plugin ***/ class PARENT( protected $pluginVersion; protected $pluginOptions; function __construct() { $this->pluginVersion='1.5'; $this->pluginOptions = get_option('option_name',0); add_action('choose_gateway', array( $this, 'choose_gateway')); } function choose_gateway(){ /**output some dropdown, select, whatever*/ echo $str; } } class CHILD extends PARENT{ function __construct() { $this->gatewayName = 'Cash on Delivery'; /**plus some more other vars*/ /** problem: here i want to have access/use the variables set in the parent (ie $this->pluginOptions) initially i thought i can just use parent::__construct(); problem is though - if i do that - the "choose_gateway" action in parent is called twice.... ***/ if(!is_admin()){ add_action('some_child_action', array($this,'some_child_action')); } } function some_child_action(){ } /**some more functions**/ } ?> /**** page***/  

Das Problem, das ich habe, ist, wie ich im obigen Code kommentiert habe. Ich assum Ich würde den Aufruf “add_action” aus dem übergeordneten Konstrukt verschieben müssen, aber ich bin mir nicht sicher, und wenn ja, nicht wissen, wo es für es noch über den Aufruf “do_action” verfügbar sein soll …

Solutions Collecting From Web of "Zugreifen auf Elternvariablen im Kindkonstrukt, ohne die Aktion im Elternelement auszuführen"

Ich denke, dein Problem ist das Muster. Sie sollten keine untergeordnete class Ihres Controllers (die Hauptklasse) erstellen, und der Controller sollte keine Aktionsrückrufe verarbeiten.

Lassen Sie den Controller die Callbacks Aktionen zuweisen . Die Aktionshandler sollten separate classn sein.

Grundbeispiel:

 namespace WPSE; add_action( 'plugins_loaded', function() { new Controller; }); class Controller { public function __construct() { $this->pluginVersion = '1.5'; $this->pluginOptions = get_option('option_name',0); $gateway = new Gateway( $this->pluginVersion, $this->pluginOptions ); add_action( 'choose_gateway', array ( $gateway, 'choose_gateway' ) ); $cash = new Cash( $this->pluginVersion, $this->pluginOptions ); add_action( 'get_cash', array ( $cash, 'get_cash' ) ); } } class Action_Handler { public function __construct( $version, $options ) {} } class Gateway extends Action_Handler { public function choose_gateway() {} } class Cash extends Action_Handler { public function get_cash() {} }