PHP :: Конструкторы и деструкторы
Конструкторы в PHP
При создании класса в нем можно определять специальный метод, называемый конструктором. Классы, в которых определены методы-конструкторы, вызывают их при создании каждого нового объекта, что позволяет передавать вновь создаваемым объектам начальные данные, тем самым инициализируя некоторое состояние объекта еще до начала его использования. Объявляются конструкторы при помощи специальной функции __construct() (см. пример №1).
<?php class fruit_color{ //Объявляем свойства public $color, $fruit; //Объявляем конструктор с одним аргументом function __construct($c){ //Задаем цвет фруктов $this->color=$c; } //Объявляем обычный метод с одним аргументом function set_fruit($fruit){ //Задаем вид фруктов $this->fruit=$fruit; //Выводим цвет и вид echo $this->color.' '.$this->fruit.'<br>'; } //Вызываем деструктор для удаления объекта при освобождении ссылок на него function __destruct(){ } } //Создаем объект и сразу же инициализируем $apples=new fruit_color('Yellow'); //Вызываем метод объекта $apples->set_fruit('orange'); //Объявляем класс-потомок class fruit_color_2 extends fruit_color{ //Объявляем свой конструктор function __construct($c_1, $c_2){ //Задаем два цвета фруктов $this->color=$c_1.' and '.$c_2; } } //Создаем объект класса-потомка $apples_2=new fruit_color_2('Red', 'yellow'); //Вызываем метод объекта $apples_2->set_fruit('apples'); ?>
Пример №1. Использование конструкторов и деструкторов
В отличие от других методов, конструкторы классов-потомков разрешается переопределять с другими параметрами, отличными от тех, которые были заданы в родительском методе-конструкторе.
Деструкторы в PHP
Если инициализированные объекты далее в программе не используются, имеет смысл удалять их для высвобождения памяти. Для этих целей в классах разрешается объявлять специальные методы, называемые деструкторами (см. пример №1). Они запускаются после освобождения всех ссылок на определенный объект или при завершении скрипта. Деструктор вызывается даже в том случае, когда работа скрипта останавливается при помощи функции exit() (данная функция выводит сообщение и прекращает выполнение скрипта). При чем, если функция exit() вызывается в самом деструкторе, она предотвращает запуск всех последующих функций завершения.
Следует помнить, что если класс-потомок определяет собственный конструктор/деструктор, то конструктор/деструктор родительского класса вызываться не будет. Поэтому для его вызова внутри конструктора/деструктора класса-потомка, следует использовать конструкцию parent::__construct()/parent::__destruct(). Если же в классе-потомке собственный конструктор/деструктор не определяется, то родительский конструктор/деструктор, если конечно он не объявлен приватным, наследуется как обычный метод.
Быстрый переход к другим страницам
- Наследование в PHP
- Конструкторы и деструкторы в PHP
- Определение области видимости свойств и методов в PHP
- Вернуться к оглавлению учебника