Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 结构/设计模式解决方案_Php_Wordpress_Oop_Design Patterns - Fatal编程技术网

Php 结构/设计模式解决方案

Php 结构/设计模式解决方案,php,wordpress,oop,design-patterns,Php,Wordpress,Oop,Design Patterns,我试图创建一个WordPress插件,但遇到了一个路障。我正在创建一个需要通过子类扩展的设置页面。主类将看起来像这样 class SettingsPage { // Properties // Methods public function metaboxes() { add_meta_box( //metabox params ); } } 此类将处理主设置页面。我现在希望能够从几个子类中创建元框。基本上是扩展/附加到metaboxes

我试图创建一个WordPress插件,但遇到了一个路障。我正在创建一个需要通过子类扩展的设置页面。主类将看起来像这样

class SettingsPage {

    // Properties

    // Methods

   public function metaboxes() {
       add_meta_box( //metabox params );
   }   

}
此类将处理主设置页面。我现在希望能够从几个子类中创建元框。基本上是扩展/附加到
metaboxes()
方法

class MetaBoxOne extends SettingsPage {

    public function metabox() {

         // add another metabox

    }

}
这个问题的最佳解决方案是什么?我一直盯着我的代码编辑器看了几个小时,想弄明白它,但运气不好。任何帮助都将不胜感激


继承是最好的途径吗

这种设计可以使用更多。还定义了
IMetaBox
(接口),以确保页面类具有功能,允许您调整其内容和行为。因此,您的设置页面可以如下所示:

class SettingsPage {

    // Fields
    ICollection<IMetaBox> _metaBoxes;
    // Properties

    // Methods

   public function metaboxes() {
       add_meta_box( //metabox params );
   }   

} 
类设置页面{
//田地
i收集代谢箱;
//性质
//方法
公共函数元数据库(){
添加元框(//元框参数);
}   
} 
你所有的

这需要通过子类进行扩展


将具有管理元数据库所需的
i集合
的内置功能,剩下要做的是调用一个将在集合上迭代的显示方法。

更新:

也许这篇文章会对您有所帮助:


首先,如果你想为你的插件创建一个设置页面,我建议你使用内置的设置API。教您了解此API概念所需的一切

其次,我认为您不能在自定义设置页面上使用metaboxes,因为“添加metaboxes”钩子只在编辑文章页面上触发,请参见:

高级操作此部分包含与查询相关的操作 WordPress用于计算要显示的帖子,WordPress 循环、激活插件和其他基本级别的WordPress代码

加载“编辑帖子”页面时,会运行“添加元数据”框。(3.0+)

最后:在另一种情况下,如果您有一个包含子实体的主容器,并且您希望在主容器中收集子实体,我认为您应该遵循核心Wordpress模式,即回调操作挂钩。在主收集器中,必须使用以下内容定义自定义操作挂钩:

do_action('your_plugin_main_collector_do_something', $param1, $param2, $param3, ...);
您的子实体应使用以下内容将自己注册到主容器:

add_action('your_plugin_main_collector_do_something', 'my_entity_callback_function_name', $priority_default_10, $how_many_parameters_you_have_to_use);

你的编程语言是否支持虚拟函数(在基类中)可以被(子类)覆盖?我认为traits是你可能正在寻找的方法。