web-dev-qa-db-fra.com

PHP Avertissement: call_user_func () s'attend à ce que le paramètre 1 soit un rappel valide

Confus. Ecrire un plugin avec lequel j'ai d'autres callbacks fonctionnant de la même manière Mais lors de l'ajout d'une méta-boîte, son échec sur le rappel avec erreur:

Avertissement PHP: call_user_func () s'attend à ce que le paramètre 1 soit un rappel valide, le premier membre du tableau n'est pas un nom de classe ou un objet valide

Erreur assez standard, mais je ne comprends pas pourquoi je la reçois. J'ai le suivant (dépouillé) dans une classe.

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...
}

Autant que je sache, je fais le rappel correctement avec & this mais rien ne s'affiche dans la metabox, bien qu'il apparaisse et que je reçoive l'erreur PHP standard ci-dessus. Je l'ai réduit dans mon code jusque-là et sa création de la boîte méta ne veut rien y mettre. J'ai mis la connexion de débogage et il ne l'atteint pas mais obtient avant et après. Pas sûr de ce que je fais mal. Toute aide grandement appréciée.

1
Jimbo

$this n'est pas défini dans l'étendue d'une fermeture. Changez le en:

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

Ou mieux séparez les deux et créez une méthode réelle au lieu d’une clôture.

3
fuxia