我试图抓住一些东西。 OO中的整个继承事。
在我的WordPress环境中,我创建了一个自定义meta_box
OO方式。
名为display()
的函数会加载元数据的内容
我想根据用户选择的内容在元框中加载不同的内容。我的想法是通过继承来做到这一点。所以display()
在父类中没有加载任何内容,但当我将它扩展到包含它自己内容的子类时,我可以调用它。
这甚至是我应该如何接近继承?
基本上是这样的:
class CMB{
public function init(){
add_action( 'add_meta_boxes', array( $this, 'add' ) );
add_action( 'save_post', array( $this, 'save' ) );
}
/**
* Adds a meta box to the post editing screen
*/
public function add(){
}
/**
* Render Meta Box content.
*/
public function display() {
// This stays empty for the parent class.
}
/**
* Save the meta when the post is saved.
*/
public function save( $post_id){
}
}
class newForm extends CMB{
public function newForm(){
// content of form goes here.
}
}
答案 0 :(得分:2)
如果我理解的话这是战略模式。你应该创建父类Abstract。所以没有人可以创建它的实例。您也可以强制子进程实现一些方法(通过abstract关键字)。最终关键字意味着孩子无法修改该方法
abstract class CMB{
final public function init(){
add_action( 'add_meta_boxes', array( $this, 'add' ) );
add_action( 'save_post', array( $this, 'save' ) );
}
/**
* Adds a meta box to the post editing screen
*/
abstract public function add();
/**
* Render Meta Box content.
*/
abstract public function display();
/**
* Save the meta when the post is saved.
*/
public function save($post_id){
/* SAVING STAFF */
/* change to final public function save if want from that method to be same in each child */
}
}
class newForm extends CMB{
public function display(){
// content of form goes here.
}
public function add(){
}
public function save($post_id){
}
}
一个很好的引用来自php.net手册评论: 另一方面,抽象类就像是一个部分构建的类。它就像一个填空的文档。它可能是使用英语,但这并不像一些文档已经编写的那样重要。 ~ironiridis