Впрочем, такой способ расширения также иногда находит применение. Мы поговорим об этом чуть позже. А пока рассмотрим, что же представляет собой наследование
(или расширение возможностей) классов.
class B extends A {
function B(параметры_для_A, другие_параметры)
{ $this->A(параметры_для_A);
инициализируем другие поля B
}
function TestB() { ... }
function Test() { ... }
}
Ключевое слово extends говорит о том, что создаваемый класс является лишь "расширением"
класса A, и не более того. То есть B содержит те же самые свойства и методы, что и A, но, помимо них и еще некоторые дополнительные, "свои".
Теперь "часть A" находится прямо внутри класса B
и может быть легко доступна, наравне с методами и свойствами самого класса B. Например, для объекта $obj класса B допустимы выражения $obj->TestA()
и $obj->TestB(). Итак, мы видим, что, действительно, класс B
является воплощением идеи "расширение функциональности класса A". Обратите также внимание: мы можем теперь забыть, что B
унаследовал от A
некоторые свойства или методы — снаружи все выглядит так, будто класс B реализует их самостоятельно.
Немного о терминологии: принято класс A называть базовым, а класс B — производным от A. Иногда базовый класс также называют суперклассом, а производный — подкласcом.
Зачем может понадобиться наследование? Например, мы написали класс Mysql-таблицы и хотели бы дополнительно иметь класс Guestbook (гостевая книга). Очевидно, в классе Guestbook будет много методов, которые нужны для того же, что и методы из MysqlTable, поэтому было бы разумным сделать его производным от MysqlTable:
class Guestbook extends MysqlTable {
. . .
методы и свойства, которых нет в MysqlTable
и которые относятся к гостевой книге
}
Многие языки программирования поддерживают множественное наследование (то есть такое, когда, скажем, класс B наследует члены не одного, а сразу нескольких классов — например, A и Z). К сожалению, в PHP таких возможностей нет.