[英]OOP PHP — How to selectively call a specific method defined in a class' constructor?
我正在学习用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
用于网络级别的管理页面而不是admin_menu
)。
有一个更好的方法吗? 有一个类的方法,将两个钩子放在该类的构造函数中,然后选择性地调用其中一个?
不幸的是,创建一个新的类实例( $page = new AdminPage
),然后在其上调用一个方法(例如$page->add_admin_page()
)在这种情况下不起作用,因为我得到一个错误,说add_menu_page
是undefined ......这一切都必须在构造函数中发生。
你可以这样做:
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 );
}
}
然后将第二个参数传递给类以更改您添加的操作,例如
$page = new AdminPage($args);
$networkPage = new AdminPage($args, true);
这是否比扩展课程更好是有争议的; 我个人认为你的初始设置没有任何问题,OOP的重点不是创建尽可能少的类 - 如果你的代码作为两个单独的类(一个扩展另一个)更有意义,那么这没有什么问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.