web-dev-qa-db-fra.com

Utilisation d'une méthode privée comme rappel d'action depuis une classe

J'ai créé une classe à partir de laquelle je voudrais appeler une méthode privée (à partir de la même classe) à partir de la méthode __construct en tant que rappel d'action.

Lorsque je souhaite utiliser une méthode publique, je peux y accéder par:

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

Cependant, cela provoque une erreur lorsque la méthode est privée. J'ai aussi essayé sans succès:

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

Comment accéder à une méthode privée?

La classe ressemble à quelque chose comme:

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

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

Il n'est pas possible d'appeler une méthode privée via une action ou un filtre. Lors de l'appel de add_action ou add_filter, WordPress ajoute le rappel à une liste de rappels pour cette action ou ce filtre spécifique. Ensuite, lorsque do_action ou apply_filters est appelé, WordPress utilise call_user_func_array pour appeler les fonctions et méthodes liées. Comme call_user_func_array n'est pas appelé depuis la classe, il ne peut pas appeler les méthodes privées de cette classe.

De plus, il n'y a pas de moyen approprié de vraiment garder la méthode privée, même si vous pouvez ajouter une méthode (publique) séparée à votre classe, l'ajouter comme rappel à l'action et faire appeler la méthode privée. En faisant cela, cependant, vous perdez le vrai concept de la méthode étant privée.

10
engelen