これはこの質問の続きです。クラスが拡張されると、元のクラス メソッドを参照します。作成されたページでエコーされるクラス名は、拡張されたクラス名である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
}
}
これを行うためのよりエレガントな方法はありますか?