gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-10-31 23:45:04 25 4
gpt4 key购买 nike

我正在学习以 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 类,其唯一目的是更改构造函数中的 Hook (我需要 admin_network_menu 用于网络级别的管理页面,而不是 admin_menu).

有更好的方法吗?一种拥有一个类的方法,将两个 Hook 都放在该类的构造函数中,然后有选择地调用一个或另一个?

不幸的是,创建类的新实例 ($page = new AdminPage),然后在其上调用方法(例如 $page->add_admin_page() )在这种情况下将不起作用,因为那时我收到一条错误消息,提示 add_menu_page is 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 的重点不是创建尽可能少的类 - 如果您的代码作为两个单独的类(一个扩展另一个)更有意义,那么这没有任何问题。

关于php - OOP PHP — 如何有选择地调用类构造函数中定义的特定方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46603153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com