Вы можете указать точный класс для вызываемого метода:
<?php
Class A {
function SelectRecord()
{
A::DeleteRecord();
echo "class A - SelectRecord ";
}
function DeleteRecord()
{
echo "class A - DeleteRecord ";
}
}
Class B extends a {
function SelectRecord()
{
Parent::SelectRecord();
echo "class B - SelectRecord ";
}
function DeleteRecord()
{
echo "class B - DeleteRecord ";
}
}
$objB = new B();
$objB->SelectRecord();
results
class A - DeleteRecord
class A - SelectRecord
class B - SelectRecord
Объяснение и дальнейшее чтение:
Механизм, который вызывает метод производного класса называется виртуальный метод . Используется для облегчения полиморфизма . Все методы в PHP являются виртуальными по умолчанию. Вы можете предотвратить переопределение метода, помечая его ключевым словом 'final'.
Как я понимаю, ваши классы не пытаются решить какую-либо практическую проблему, и это всего лишь упражнения по изучению языка. В 1015 * Effective Java:
есть замечательное руководство по использованию наследования в Joshua Bloch. Наследование подходит только в тех случаях, когда подкласс действительно является подтипом суперкласса. Другими словами, класс B должен расширять класс A только в том случае, если между двумя классами существует отношение «is-a». Если у вас возникнет желание расширить класс B на класс A, задайте себе вопрос: действительно ли каждый B является A? Если вы не можете правдиво ответить «да» на этот вопрос, B не должен расширять A. Если ответ «нет», часто бывает, что B должен содержать частный экземпляр A и предоставлять меньший и более простой API: A не является важной частью. B, просто деталь его реализации.