这是this question的延续。当类扩展时,它引用原始类方法。创建的页面中的回显类名称应为 AnotherAdminPage ,这是扩展的类名。
/*
Plugin Name: static method callback demo
*/
class AnotherAdminPage extends AdminPageClass {
}
add_action('admin_menu', AnotherAdminPage::_admin_menu());
class AdminPageClass {
static function _admin_menu() {
$class_name = get_class();
$classinstance = new $class_name();
return array(&$classinstance, "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() {
?>
<div class="wrap">
<p><?php echo get_class(); ?></p>
</div>
<?php
}
}
它通过重新定义扩展类中的方法来工作,但在这种情况下扩展它会变得毫无意义。
class AnotherAdminPage extends AdminPageClass {
static function _admin_menu() {
$class_name = get_class();
$classinstance = new $class_name();
return array(&$classinstance, "admin_menu");
}
function admin_page() {
?>
<div class="wrap">
<p><?php echo get_class(); ?></p>
</div>
<?php
}
}
那么有更优雅的方式吗?
答案 0 :(得分:1)
答案 1 :(得分:1)
使用get get_called_class 而不是 get_class 。 http://php.net/manual/en/function.get-called-class.php。然后您不需要重新定义_admin_menu函数
答案 2 :(得分:-1)
我自己发现它有效。
/*
Plugin Name: extended class method as a callback demo
*/
class AnotherAdminPage extends AdminPageClass {
}
add_action('admin_menu', array(new AnotherAdminPage, "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() {
?>
<div class="wrap">
<p><?php echo get_class($this); ?></p>
</div>
<?php
}
}