Наследование и полиморфизм
В данном уроке из серии “PHP и ООП” я расскажу Вам о том, как задействовать механизмы наследования и полиморфизма при программировании в стиле ООП на PHP.
Для создания производного класса от базового используется кодовая конструкция следующего вида:
<?
class A
{
// описание базового класса
}
class B extends A
{
// описание производного класса
}
?>
Производный класс имеет все те свойства и методы, присущие базовому классу, а также свои собственные свойства и методы. Ниже изложенный листинг показывает это наглядно:
<?
// создаём родительский класс…
class parent
{
function test1 ()
{
echo “test1 called!\r\n”;
}
}
// …и на его основе дочерний класс
class child extends parent
{
function test2 ()
{
echo “test2 called!\r\n”;
}
}
// при создании объекта дочернего класса…
$obj = new child;
// …можно использовать как методы родительского класса…
$obj->test1 ();
// …так и свои собственные методы
$obj->test2 ();
?>
Также в дочернем классе можно переопределить методы, заданные в родительском классе. Такие методы называются виртуальными.
Понятие полиморфизма также довольно легко объясняется на практике. Как я говорил в первом уроке по ООП, полиморфизм — ничто иное, как использование родительским классом методов дочернего класса.
Вот пример программы, использующий механизм полиморфизма (листинг не прокомментирован, но, думаю, Вы разберётесь самостоятельно):
<?
class parent
{
function test ()
{
echo “Calling test from parent”;
}
function call_test ()
{
$this->test ();
}
}
class child extends parent
{
function test ()
{
echo “Calling test from child”;
}
}
$obj = new child;
$obj->call_test ();
?>
Последняя строчка кода выведет текст “Calling test from child”, хоть функция call_test и не задана в классе child, но использует его методы. Как видно, что суть полиморфизма довольно проста, и полностью следует из идеи наследования.
Итак, мы уже разобрались с “тремя китами ООП”: инкапсуляцией, наследованием и полиморфизмом. В следующих уроках мы познакомимся с некоторыми функциями для работы с классами в PHP, а также моделью ООП в PHP5.





Добавить комментарий
Вы должны войти