Руководство по PHP
Пред. | Глава 19. Классы и объекты (PHP 5) | След.

# Конструкторы и деструкторы

## Constructor

PHP 5 позволяет объявлять методы-конструкторы. Классы, в которых объявлен метод-констуктор, будут вызывать этот метод при каждом создании нового объекта, так что это может оказаться полезным, чтобы, например, инициализировать какое-либо состояние объекта перед его использованием.

> Замечание: Конструкторы в классах-родителях не вызываются автоматически. Чтобы вызвать конструктор, объявленный в родительском классе, следует обратиться к методу parent::__construct().

Пример 19-7. Использование унифицированных конструкторов

`<?php class BaseClass { function __construct() { print "Конструктор класса BaseClass\n"; } } class SubClass extends BaseClass { function __construct() { parent::__construct(); print "Конструктор класса SubClass\n"; } } $obj = new BaseClass(); $obj = new SubClass(); ?>`

Если PHP 5 не может обнаружить объявленный метод __construct(), вызов конструктора произойдет по прежней схеме, через обращение к методу, имя которого соответствует имени класса. Может возникнуть только одна проблема совместимости старого кода, если в нём присутствуют классы с методами __construct().

## Деструкторы

PHP 5 предоставляет концепцию деструкторов, сходную с теми, что применяются в других ОО языках, таких, как Java: когда освобождается последняя ссылка на объект, перед высвобождением памяти, занимаемой этим объектом, вызывается метод __destruct(), не принимающий параметров.

Пример 19-8. Пример использования деструктора

`<?php class MyDestructableClass { function __construct() { print "Конструктор\n"; $this->name = "MyDestructableClass"; } function __destruct() { print "Уничтожается " . $this->name . "\n"; } } $obj = new MyDestructableClass(); ?>`

Как и в случае с конструкторами, деструкторы, объявленные в родительском классе, не будут вызваны автоматически. Для вызова деструктора, объявленном в классе-родителе, следует обратиться к методу parent::__destruct().

Пред. | Начало | След.
Autoloading Objects | Уровень выше | Visibility