Напомним, что в классе имя метода уникально, т.е. нельзя определить два метода с одинаковым именем и различным числом параметров. По этой причине перегрузка метода базового класса (т.е. его замена на метод класса-потомка) происходит в том случае, если в классе-потомке есть метод, совпадающий по имени с методом базового класса. Количество параметров может отличаться!
Пример:
<?php
abstract class Base_Class
{
public function method1( $p1, $p2 )
{
echo "Вызвали method1 базового класса<br />";
}
}
class Child_Class1 extends Base_Class
{
// этот метод перегружает метод базового класса
public function method1( $p1 )
{
echo "Вызвали method1 класса потомка<br />";
}
}
class Child_Class2 extends Base_Class
{
public function method2( $p1 )
{
echo "Вызвали method2 класса потомка<br />";
}
}
$o1 = new Child_Class1();
$o2 = new Child_Class2();
// вызвали method1 потомка
$o1->method1( "1" );
// сигнатура вызова другая, но снова вызываем method1 потомка
$o1->method1( "1", "2" );
// вызвали method1 родителя, поскольку в Child_Class2 метод не перегружен
$o2->method1( "1", "2" );
?>
Полиморфизм в PHP обеспечивает:
· Возможность в классах-потомках перегрузить методы базового класса;
· Возможность, написав программу, ссылающуюся на базовый класс, использовать вместо базового класса классы-потомки. При этом вместо перегруженных методов базового класса будут использоваться методы из классов потомков с теми же именами.