web-dev-qa-db-de.com

Verwenden einer privaten Methode als Aktionsrückruf aus einer Klasse heraus

Ich habe eine Klasse erstellt, aus der ich eine private Methode (aus derselben Klasse) aus der __construct-Methode als Aktionsrückruf aufrufen möchte.

Wenn ich eine öffentliche Methode verwenden möchte, kann ich folgendermaßen darauf zugreifen:

add_action( 'init', array( $this, 'action_callback' ) );

Dies führt jedoch zu einem Fehler, wenn die Methode privat ist. Ich habe es auch erfolglos versucht:

add_action('init', $this->action_callback() );

Wie greife ich auf eine private Methode zu?

Die Klasse sieht ungefähr so ​​aus:

class My_class {
    public function __construct() {
        add_action( 'init', array( $this, 'action_callback' ) );
    }

    private function action_callback() {
        // do something
    }
}
3
tommyf

Es ist nicht möglich, eine private Methode über eine Aktion oder einen Filter aufzurufen. Beim Aufrufen von add_action oder add_filter fügt WordPress den Rückruf zu einer Liste von Rückrufen für diese bestimmte Aktion oder diesen Filter hinzu. Wenn dann do_action oder apply_filters aufgerufen wird, verwendet WordPress call_user_func_array, um die verknüpften Funktionen und Methoden aufzurufen. Da call_user_func_array nicht aus der Klasse aufgerufen wird, können keine privaten Methoden dieser Klasse aufgerufen werden.

Darüber hinaus gibt es keine Möglichkeit, die Methode wirklich privat zu halten, obwohl Sie Ihrer Klasse eine separate (öffentliche) Methode hinzufügen, diese als Rückruf für die Aktion hinzufügen und die private Methode aufrufen können. Dabei verlieren Sie jedoch das eigentliche Konzept, dass die Methode privat ist.

10
engelen