Método de paso de clase como función de callback en WordPress

Estoy buscando una manera de pasar un método de clase a un parámetro de función de callback.

Usualmente uso create_function() siguiente manera pero he escuchado que es lento y hace que sea difícil depurarlo.

 add_action('init', create_function('', '$o = new AdminPageClass;')); class AdminPageClass { function __construct() { add_action('admin_menu', array(&$this, 'admin_menu')); } function admin_menu() { add_options_page( 'Sample Admin Page Class', 'Sample Admin Page Class', 'manage_options', 'sample_admin-page_class', array(&$this, 'admin_page')); } function admin_page() { ?> 

Hi there

Hello World!

<?php } }

Por supuesto, se puede hacer con una función adicional como esta; sin embargo, me gustaría hacerlo sin él si es posible.

 add_action('init', 'load_admin_page_class'); function load_admin_page_class() { $o = new AdminPageClass; } 

Además, crear una instancia del objeto de clase antes de hacerlo lo hace posible, pero también crea una línea adicional.

 $o = new AdminPageClass; add_action('admin_menu', array(&$o, 'admin_menu')); class AdminPageClass { function admin_menu() { add_options_page( 'Sample Admin Page Class', 'Sample Admin Page Class', 'manage_options', 'sample_admin-page_class', array(&$this, 'admin_page')); } function admin_page() { ?> 

Hi there

Hello World!

<?php } }

Siempre defino las clases en archivos separados, así que prefiero el primer método que reduce las líneas en el archivo de complemento principal. Pero como se mencionó, se debe evitar el uso de create_function() .

Aprecio tu información.

Descubrí que no era necesario crear un método estático.

 add_action('admin_menu', array(new AdminPageClass, "admin_menu")); class AdminPageClass { function admin_menu() { add_options_page( 'Sample Admin Page Class', 'Sample Admin Page Class', 'manage_options', 'sample_admin_page_class', array(&$this, 'admin_page')); } function admin_page() { ?> 

Hi there

Hello World!

Cree un método estático que devuelva la matriz que contiene la instancia de la clase y el nombre del método.

 /* Plugin Name: static method callback demo */ add_action('admin_menu', AdminPageClass::_admin_menu()); class AdminPageClass { static function _admin_menu() { $class_name = get_class(); $classinstance = new $class_name(); return array(&$classinstance, "admin_menu"); } function admin_menu($instantiate=false) { add_options_page( 'Sample Admin Page Class', 'Sample Admin Page Class', 'manage_options', 'sample_admin-page_class', array(&$this, 'admin_page')); } function admin_page() { ?> 

Hi there

Hello World!