这是这个问题的延续。当类被扩展时,它引用了原来的类方法。在创建的页面中回显的类名应该是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
    }   
}
那么有没有更优雅的方式来做到这一点?