как получить доступ к методу прародителя в PHP - PullRequest
0 голосов
/ 10 февраля 2019

Я реализовал многоуровневое наследование со следующими тремя классами.Если я хочу получить доступ к методу show () класса p в классе r, то как мы можем это сделать.Я пытался с parent :: parent :: show (), но в PHP такой возможности нет.

Итак, кто-нибудь может подсказать, как мы можем это сделать?

class p{
    public function show() {
        echo __method__;
    }
}

class q extends p {
    public function show() {
        echo __method__;
    }
}

class r extends q {
    public function show() {
        echo __method__;
    }
}

Ответы [ 4 ]

0 голосов
/ 10 февраля 2019

Вы можете создать объект класса p в классе r и затем получить доступ к методу show.вот так:

class p{
    public function show() {
        echo __method__;
    }
}

class q extends p {
    public function show() {
        echo __method__;
    }
}

class r extends q {
    public function show() {
        echo __method__;
    }

    public function showP() {
        $p = new p();
        $p->show();

    }

}

$r = new r();
echo $r->showP();

Надеюсь, это поможет вам.

0 голосов
/ 10 февраля 2019

при расширении класса подкласс наследует все открытые и защищенные методы от родительского класса.Если класс не переопределяет эти методы, они сохранят свою первоначальную функциональность.используйте другое имя метода, например

class p{

    public function show() {
        echo __method__;
    }

    public function p_show() {
        echo __method__;
    }
}

class q extends p {

     public function show() {
       echo __method__;
     }

    public function q_show() {
       echo __method__;
     }
}

class r extends q {

  public function show() {
    echo __method__;
  }

}

$testObject = new r();
$testObject->p_show();
$testObject->q_show();
$testObject->show();

вывод:

p::p_show
q::q_show
r::show
0 голосов
/ 10 февраля 2019

Каждый родитель может иметь собственную реализацию функции, чтобы вы могли создать другую функцию, которая указывает на родителя или родителя родителя:

class p
{
    public function show()
    {
        return 'hello grandson';
    }
}

class q extends p
{
    public function show()
    {
        return 'hello child';
    }

    public function showFather()
    {
        return Parent::show();
    }
}

class r extends q
{
    public function show()
    {
        return 'Hello';
    }

    public function showFather()
    {
        return Parent::show();
    }

    public function showGrandFather()
    {
        return Parent::showFather();
    }
}

$instance = new r();
0 голосов
/ 10 февраля 2019

Используйте parent::method_name() для вызова родительского метода

class p{
    public function show() {
        echo "I am from p class";
    }
}

class q extends p {
    public function show() {
        parent::show();
    }
}

class r extends q {
    public function show() {
        parent::show();
    }
}

См. Скриншот ниже:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...