15.9. Расширение классов в PHP
В PHP предусмотрена такая важная вещь, как расширение классов, т. е. у вас есть уже один класс, который отвечает за те или иные действия, и вам срочно необходимо внести в него добавления. Для этого можно использовать возможности классов;
Расширенный, или производный, класс имеет возможность доступа ко всем переменным и функциям основного класса плюс те данные, которые вы добавляете в новом классе. Синтаксис расширения основного класса заключается в присутствии ключевого слова extends. Обратите внимание, что множественное наследование (наследование от двух или более классов) не поддерживается. Приведем пример расширения классов:
class Add_Stock extends Stock {
var $owner;
function set_owner ($name) {
$this->owner = $name;
}
}
Класс Add_stock имеет свое собственное имя, со своими переменными и функциями, но при этом он также имеет доступ к переменным класса Stock, определенного
нами ранее (см. пример 16.2), т. е. может использовать значения как из своего класса, так и из ранее определенного.
В РНР также существуют функции-конструкторы. Функции-конструкторы в классе — это функции, которые автоматически объявляются, т. е. задаются определенными конкретными значениями, когда вы создаете новый образец класса. Функция становится конструктором, когда она имеет то же самое название, что и класс. Например:
class my_study extends Stock {
function my_study() {
$this->add_item("10", 1);
}
}
Данная функция имеет аналогичное название, что и класс. Это определяет класс my_study, который является расширением класса stock. В массив класса stock добавляется элемент под номером 10, равный 1, с учетом описанной нами ранее функции. Какправило, прииспользованиитакихклассовнеобходимотакжепользоваться комментариями, так как это дает более полное понимание того, как работает этот класс.
Приведем еще способы представления классов-конструкторов:
class my_study extends Stock {
function my_study <$item = "10", $num = 1) {
$this->add_item($item, $num) ;
}
}
$default = new my_study;
$different = new my_study ("20", 17);
Как видите, в данном классе происходит задание значения в самой функции, что, конечно, очень удобно. Обратите внимание на строки:
1. $default = new my_study;
2. $different = new my_study ("40", 77);
Первая строка создает новый объект под названием $def что ведет к обращению к классу с переменными, которые заданы в функции. Если же необходимость в использовании данных значений пропала и вам срочно необходимо внести свои, то можно это сделать следующей строкой, опять же при помощи объявления нового объекта — строки два. При этом переменным Sitem, $num будут присвоены значения 40 и 77 соответственно.
ВНИМАНИЕ
Для производных классов конструктор исходного класса автоматически не вызывается, если был вызван конструктор производного класса.