Как сделать так, чтобы только родительский метод выполнялся в наследовании классов на PHP? - PullRequest
2 голосов
/ 17 октября 2019

У меня есть несколько запросов об этом примере, я делаю этот простой код, всего два класса, родительский и сынский класс. Когда я выполняю, сын должен выполнить родитель, а родительский метод может выполнить сам, НО программа не должна выполнять метод сына.

Когда я запускаю эту программу, выполняются оба, родитель и сын. Существуют ли какие-либо, чтобы предотвратить это и выполнить только метод отца?

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

ПО ПРОИЗВОДСТВУ: я не могу изменить класс Отца. Спасибо

1 Ответ

0 голосов
/ 18 октября 2019

Вам просто нужно добавить $element обратно в класс Son и использовать его, как вы это делали в классе Father:

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;
        }
    }
}
...