如何在 PHP 上的 class 继承中仅创建父方法 运行?

How can I make only the parent method run in a class inheritance on PHP?

我对这个例子有一些疑问,我做了这个简单的代码,只有两个 classses,父子 class。我执行子的时候一定要执行父,父方法可以自己执行,但是程序不能执行子方法。

当我运行这个程序时,父子都执行。有什么可以防止这种情况只执行父亲的方法吗?

class Father{

    private $element = 0; //Just to prevent recursivity

    public function add($a = null){

        if ($this->element == 0) {
            echo "<br>I'm the father"; //Execution of fhter
            $this->element = 1;

            $this->add('<br> I was an accidente'); //This instruccion call both methods, parent and soon
        }else{
            echo "<br>But not anymore"; 
        }
    }
}
class Son extends Father{
    public function add($a = null){

        parent::add();

        echo "<br>I'm the son";
        if ($a != null) {
            echo $a;
        }
    }
}

$son = new Son();
$son->add();

我得到了这些结果

I'm the father
But not anymore
I'm the son
I was an accident
I'm the son

如您所见,当我在父级上执行 $this->add() 方法时,它们执行两种方法(添加父子)。

有什么方法可以执行这段代码,以便在对父亲执行 $this->add() 时,它不会同时执行(父亲和儿子)?

换句话说,我期待下一个结果

I'm the father
But not anymore
I'm the son
I was an accident

顺便说一句:我无法修改父 class。 谢谢

您只需将 $element 添加回 Son class 并像在 Father class 中那样使用它:

class Son extends Father
{
    # Add this item back
    private $element = 1;

    public function add($a = null)
    {
        parent::add();
        # Check if it's set
        if($this->element == 1) {
            # Echo
            echo "<br>I'm the son";
            # Set to 0 so it doesn't recurse
            $this->element  =   0;
        }
        if ($a != null) {
            echo $a;
        }
    }
}