web-dev-qa-db-ja.com

クラス内からのアクションコールバックとしてのプライベートメソッドの使用

アクションコールバックとして__constructメソッドからプライベートメソッドを(同じクラス内から)呼び出したいクラスを作成しました。

パブリックメソッドを使用したい場合は、次の方法でアクセスできます。

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

ただし、これはメソッドがプライベートの場合はエラーになります。私も失敗しました:

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

プライベートメソッドにアクセスするにはどうすればいいですか?

クラスは次のようになります。

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

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

アクションやフィルタを通してプライベートメソッドを呼び出すことはできません。 add_actionまたはadd_filterを呼び出すとき、WordPressはその特定のアクションまたはフィルタのコールバックのリストにコールバックを追加します。その後、do_actionまたはapply_filtersが呼び出されると、WordPressはcall_user_func_arrayを使用してリンクされた関数とメソッドを呼び出します。 call_user_func_arrayはクラス内から呼び出されないため、そのクラスのプライベートメソッドを呼び出すことはできません。

さらに、クラスに別の(public)メソッドを追加し、それをアクションへのコールバックとして追加して、そのprivateメソッドを呼び出させることもできますが、そのメソッドを本当に非公開にする適切な方法はありません。しかし、そうすることで、あなたはメソッドがプライベートであるという本当の概念を失います。

10
engelen