OOP PHP - 如何有选择地调用类的构造函数中定义的特定方法?

时间:2017-10-06 10:00:02

标签: php wordpress oop

我正在学习以 OOP 的方式编写Wordpress Multisite,因为我现在对 OOP 很新,我现在处于一种我看不出的境地我自己解决。

具体来说,我正在创建一些类来使用 OOP 方法创建管理页面(在网络和子网站级别)。这是我的简化代码:

class AdminPage {

    public function __construct( $args ) {
        add_action( 'admin_menu', array( $this, 'add_admin_page' ) );
    }

    public function add_admin_page() {
        add_menu_page( // arguments );
    }

}

class AdminNetworkPage extends AdminPage {

    public function __construct( $args ) {
        add_action( 'network_admin_menu', array( $this, 'add_admin_page' ) );
     }

}

代码可以工作,但正如您所看到的,我必须扩展AdminPage类,其唯一目的是更改构造函数中的钩子(我需要admin_network_menu用于网络级别的管理页面而不是{{1} })。

有更好的方法吗?有一个类的方法,将两个钩子放在该类的构造函数中,然后选择性地调用其中一个?

不幸的是,在这种情况下,创建类的新实例(admin_menu)然后在其上调用方法(例如$page = new AdminPage)将不起作用,因为我收到错误{ {1}}未定义......一切都必须在构造函数中发生。

1 个答案:

答案 0 :(得分:0)

你可以这样做:

%ld

然后将第二个参数传递给类以更改您添加的操作,例如

class AdminPage {

    public function __construct( $args, $networkPage = false ) {

        if($networkPage) {

            add_action( 'network_admin_menu', array( $this, 'add_admin_page' ) );

        } else {

            add_action( 'admin_menu', array( $this, 'add_admin_page' ) );

        }

    }

    public function add_admin_page() {

        add_menu_page( // arguments );

    }
}

这是否比仅扩展课程更好是值得商榷的;我个人认为你的初始设置并没有什么问题,OOP的重点不是创建尽可能少的类 - 如果你的代码更有意义,就像两个独立的类(一个扩展另一个)那么这没有什么不妥。