Конструктор и деструктор
Чтобы при создании класса присвоить начальные значения каким-либо пере-
менным, необходимо создать метод, имеющий предопределенное название
construct(). Такой метод называется конструктором. Конструктор всегда автоматически вызывается сразу после создания объекта.
class <Имя класса> {
<Область видимости> <Имя переменной co знаком $>;
[<Область видимости>] function <Имя функции> ([Параметры]) {
$this-><Имя переменной без знака $> = <Значение>;
$this-><Имя функции>();
}
public function construct(<Параметр1>) {
$this-><Имя переменной без знака $> = <Параметр1>;
}
}
При создании экземпляра класса параметр <Параметр1> можно указать после имени класса в круглых скобках:
<Экземпляр класса> = new <Имя класса>(<Параметр1>);
Кроме того, конструктор может иметь то же название, что и имя класса. Та- кой метод создания конструктора применялся в PHP 4. В настоящий момент может использоваться для совместимости.
Если конструктор вызывается при создании объекта, то перед уничтожени- ем объекта автоматически вызывается метод, называемый деструктором. В языке PHP деструктор реализуется в виде предопределенного метода
destruct().
Например:
<?php
class Class1 {
public $var;
public function construct($var) {
$this->var = $var;
echo ’Вызван конструктор<br>’;
}
public function destruct() {
echo ‘Вызван деструктор’;
}
public function f_get() {
return $this->var;
}
}
$obj = new Class1(5);
echo ‘Значение свойства var равно ‘ . $obj->f_get() . ‘<br>’;
echo ‘Вывод перед удалением объекта<br>’;
unset($obj);
?>
Этот простейший пример выведет:
Вызван конструктор
Значение свойства var равно 5
Вывод перед удалением объекта
Вызван деструктор
5.31.3. Наследование
Предположим, у нас есть класс (например, Сlass1). С помощью наследования мы можем создать новый класс (например, Сlass2), в котором будет доступ ко всем свойствам и методам класса Сlass1, а также к некоторым новым свойствам и методам.
class Class1 {
public function f_print() {
echo ‘Метод f_print класса Class1<br>’;
}
public function f_display() {
echo ‘Метод f_display класса Class1<br>’;
}
}
class Class2 extends Class1 {
public function f_new() {
echo ‘Метод f_new класса Class2<br>’;
}
}
Ключевое слово extends указывает, что класс Class2 наследует все свойства и методы класса Class1.
$obj = new Class2();
$obj->f_new();
$obj->f_print();
$obj->f_display();
Выведенный этим примером код HTML будет отображен Web-браузером так:
Функция f_new класса Class2
Функция f_print класса Class1
Функция f_display класса Class1
Если имя функции в классе Class2 совпадает с именем функции класса
Class1, то будет использоваться функция из класса Class2:
class Class2 extends Class1 {
public function f_new() {
echo ‘Метод f_new класса Class2<br>’;
}
public function f_display() {
echo ‘Привет’;
}
}
$obj = new Class2();
$obj->f_display();
Этот пример выведет Привет, а не Метод f_display класса Class1.
Чтобы использовать метод, объявленный в родительском классе, следует вы-
звать его с помощью ключевого слова parent. Пример:
class Class1 {
public function f_display() {
echo ‘Метод f_display класса Class1<br>’;
}
}
class Class2 extends Class1 {
public function f_display() {
parent::f_display();
echo ‘Привет’;
}
}
$obj = new Class2();
$obj->f_display();
Выведет:
Метод f_display класса Class1
Привет
О БРАТИТЕ ВНИМ АНИЕ
в родительском классе автоматически не вызы- ваются. Для их вызова также необходимо использовать ключевое слово parent.
В некоторых случаях необходимо запретить переопределение метода. Для этого перед определением метода следует указать ключевое слово final:
class Class1 {
final public function f_display() {
echo ‘Метод f_display класса Class1<br>’;
}
}
class Class2 extends Class1 {
public function f_display($msg) {
echo $msg;
}
}
$obj = new Class2();
Так как перед методом f_display() в классе Class1 стоит ключевое слово
final, интерпретатор выведет сообщение об ошибке:
Fatal error: Cannot override final method Class1::f_display()
Источник: Прохоренок Н. А. HTML, JavaScript, PHP и MySQL. Джентльменский набор Web-мастера. — 3-е изд., перераб. и доп. — СПб.: БХВ-Петербург, 2010. — 912 с.: ил. + Видеокурс (на CD-ROM) — (Профессиональное программирование)