web-dev-qa-db-ja.com

PHP 警告:call_user_func()はパラメータ1が有効なコールバックであることを期待します

混乱しています。他のコールバックも同様にうまく動作するようなプラグインを書く。しかし、メタボックスを追加するとエラーでコールバックに失敗します。

PHPの警告:call_user_func()はパラメータ1が有効なコールバックであることを期待しています、最初の配列メンバは有効なクラス名またはオブジェクトではありません

かなり標準的なエラーですが、なぜそれを受け取ったのか私はわかりません。私はクラスに次のものを書き留めています。

function __construct(){     
   add_action( 'init', array( &$this, 'init' ) );
}

function init() {
   add_action('add_meta_boxes', function() { add_meta_box('model', 'Parent', array(&$this,'parent_meta_box'), 'model', 'side', 'high');});
}

function parent_meta_box( $post ) {
   // whatever happens here...
}

私の知る限りでは、&thisを使ってコールバックを正しく行っていますが、メタボックス内には何も表示されず、上記の標準PHPエラーを受け取ります。私はコードの中でこれを削除しましたが、メタボックスを作成してもその中には何も配置されません。私はデバッグロギングを入れました、そしてそれはそれに到達しませんが前後に取得します。何が悪いのかわからない。任意の助けは大歓迎です。

1
Jimbo

$thisはクロージャの範囲では定義されていません。次のように変更してください。

add_action('add_meta_boxes', function() use ($this) { 
add_meta_box('model', 'Parent', array($this,'parent_meta_box'), 'model', 'side', 'high');
});

または、両方を分離して、クロージャではなく実際のメソッドを作成してください。

3
fuxia