OOP PHP – 如何有选择地调用类的构造函数中定义的特定方法?
发布时间:2020-12-13 22:28:24 所属栏目:PHP教程 来源:网络整理
导读:我正在学习用OOP方式编写Wordpress Multisite,因为我现在对OOP很新,我现在处于一种我似乎无法自己解决的问题. 具体来说,我正在创建一些类来使用OOP方法创建管理页面(在网络和子网站级别).这是我的简化代码: class AdminPage { public function __construct(
我正在学习用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','add_admin_page' ) ); } } 代码可以工作,但正如您所看到的,我必须扩展AdminPage类,其唯一目的是更改构造函数中的钩子(我需要admin_network_menu用于网络级别的管理页面而不是admin_menu). 有一个更好的方法吗?有一个类的方法,将两个钩子放在该类的构造函数中,然后选择性地调用其中一个? 不幸的是,创建一个新的类实例($page = new AdminPage),然后在其上调用一个方法(例如$page-> add_admin_page())在这种情况下不起作用,因为我得到一个错误说add_menu_page未定义……这一切都必须在构造函数中发生. 解决方法
你可以这样做:
class AdminPage { public function __construct( $args,$networkPage = false ) { if($networkPage) { add_action( 'network_admin_menu','add_admin_page' ) ); } else { add_action( 'admin_menu','add_admin_page' ) ); } } public function add_admin_page() { add_menu_page( // arguments ); } } 然后将第二个参数传递给类以更改您添加的操作,例如 $page = new AdminPage($args); $networkPage = new AdminPage($args,true); 这是否比扩展课程更好是有争议的;我个人认为你的初始设置没有任何问题,OOP的重点不是创建尽可能少的类 – 如果你的代码作为两个单独的类(一个扩展另一个)更有意义,那么这没有什么问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |