Возможность в классах-потомках перегрузить методы базового класса была описана в примере выше. Основной конструкцией для использования других возможностей полиморфизма является конструкция instanceof для проверки принадлежности объекта заданному классу. Конструкция instanceof позволяет для объекта класса-потомка определить его принадлежность базовому классу.
Использование данной конструкции поясняет пример:
<?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 класса потомка 1<br />";
}
}
class Child_Class2 extends Base_Class
{
// этот метод перегружает метод базового класса
public function method1( $p1="" )
{
echo "Вызвали method1 класса потомка 2<br />";
}
}
// создадим массив из двух классов - потомков, классы различны
$arr = array( new Child_Class1(), new Child_Class2() );
// этот фрагмент кода использует только базовый класс, но может
// применяться с потомками
foreach( $arr as $v )
{
// убеждаемся, что работаем с Base_Class или его потомками
if( $v instanceof Base_Class )
{
// работаем с Base_Class, стало быть, можем вызывать method1()
// реально будут вызваны методы потомков
$v->method1();
}
}
?>