OO继承具有不同的形式

时间:2018-03-16 10:10:20

标签: php wordpress oop inheritance

我试图抓住一些东西。 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.
    }
}

1 个答案:

答案 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