Конструктор и деструктор php
Конструкторы и деструкторы
Конструктор
PHP 5 позволяет объявлять методы-конструкторы. Классы, в которых объявлен метод-конструктор, будут вызывать этот метод при каждом создании нового объекта, так что это может оказаться полезным, например, для инициализации какого-либо состояния объекта перед его использованием.
Замечание: Конструкторы в классах-родителях не вызываются автоматически, если класс-потомок определяет собственный конструктор. Чтобы вызвать конструктор, объявленный в родительском классе, следует обратиться к методу parent::__construct() внутри конструктора класса-потомка. Если в классе-потомке не определен конструктор, то он может наследоваться от родительского класса как обычный метод (если он не определен как приватный).
Пример #1 Использование унифицированных конструкторов
class BaseClass <
function __construct () <
print “Конструктор класса BaseClass\n” ;
>
>
class SubClass extends BaseClass <
function __construct () <
parent :: __construct ();
print “Конструктор класса SubClass\n” ;
>
>
class OtherSubClass extends BaseClass <
// inherits BaseClass’s constructor
>
// In BaseClass constructor
$obj = new BaseClass ();
// In BaseClass constructor
// In SubClass constructor
$obj = new SubClass ();
// In BaseClass constructor
$obj = new OtherSubClass ();
?>
В целях обратной совместимости, если PHP 5 не может обнаружить объявленный метод __construct() и этот метод не наследуется от родительских классов, то вызов конструктора произойдет по устаревшей схеме, через обращение к методу, имя которого соответствует имени класса. Может возникнуть только одна проблема совместимости старого кода, если в нём присутствуют классы с методами __construct(), использующиеся для других целей.
Начиная с версии PHP 5.3.3, методы с именами, совпадающими с последним элементом имени класса, находящимся в пространстве имен, больше не будут считаться конструкторами. Это изменение не влияет на классы, не находящиеся в пространстве имен.
Пример #2 Конструкторы в классах, находящихся в пространстве имен
Деструкторы
PHP 5 предоставляет концепцию деструкторов, сходную с теми, что применяются в других ОО языках, таких, как C++. Деструктор будет вызван при освобождении всех ссылок на определенный объект или при завершении скрипта (порядок выполнения деструкторов не гарантируется).
Пример #3 Пример использования деструктора
$obj = new MyDestructableClass ();
?>
Как и в случае с конструкторами, деструкторы, объявленные в родительском классе, не будут вызваны автоматически. Для вызова деструктора, объявленном в классе-родителе, следует обратиться к методу parent::__destruct() в теле деструктора-потомка. Также класс-потомок может унаследовать деструктор из родительского класса, если он не определен в нем.
Деструкторы, вызываемые при завершении скрипта, вызываются после отправки HTTP-заголовков. Рабочая директория во время фазы завершения скрипта может отличаться в некоторых SAPI (например, в Apache).
Попытка бросить исключение в деструкторе (вызванного во время завершения скрипта) влечет за собой фатальную ошибку.
Объектно-ориентированное программирование в PHP. Конструкторы и деструкторы
В сегодняшней статье мы поговорим об конструкторах и деструкторах в ООП.
Конструкторы
Очень часто при создании экземпляра объекта на основе класса требуется выполнить какие-то базовые настройки, будь то установка свойств объекта или же открытие файлов конфигурации, да мало ли что еще. Именно для этих целей в ООП и существует метод конструктор. В версиях до PHP 5 имя метода конструктора совпадало с именем класса к которому он относится, а начиная с версии PHP 5 имя метода конструктора необходимо называть __construct() (это 2 подчеркивания перед словом construct()).
Конструктор автоматически вызывается при создании объекта. Давайте попробуем создать класс, который будет содержать метод __construct():
MyClass содержит простой конструктор, который выводит сообщения с помощью оператора echo. В последней сточке кода мы создаем экземпляр класса MyClass() и когда это происходит PHP автоматически вызывает конструктор и на экран выводится сообщение «Я только что был создан!»
Давайте теперь посмотрим еще на один пример, в котором при создании объекта происходит инициализации его свойств:
Если запустить этот скрипт, то на экран будет выведена следующая информация:
Далее мы создаем новый объект Product и передаем в нем информацию о товаре. Конструктор принимает эти данные и устанавливает соответствующие свойства объекта. И наконец вызывается метод getProduct(), который выводит на экран сохраненные значения свойств объекта.
Деструкторы
Подобно конструкторам в PHP существуют деструкторы, которые вызываются строго перед тем, как объект удаляется из памяти.
Это может понадобится, например, для удалению объектов, зависящих от удаляемого объекта, закрытие соединения с базой данных или файлов.
Примечание: PHP автоматически удаляет объект из памяти, когда не остается ни одной переменной, указывающей на него. Например, если вы создадите новый объект и сохраните его в переменной $myObject, а затем удалите ее с помощью метода unset($myObject), то сам объект также удалится. Также, если вы создали локальную переменную в какой-либо функции, она (вместе с объектом) удалится, когда функция завершит работу.
В отличии от конструкторов, в деструкторы нельзя передавать никакие параметры!
Чтобы создать деструктор, добавьте в класс метод __destruct(). Вот простой пример:
Мы создали простенький деструктор, который отображает на странице сообщение. Затем мы создали объект нашего класса и сразу же удалили его, вызвав метод unset() для переменной, которая ссылается на объект. Перед самым удалением объекта вызвался деструктор, который отобразил в браузере сообщение “Я деструктор. Объект был удален. Пока!”.
Также следует заметить, что деструктор вызывается и при выходе из скрипта, так как все объекты и переменные при выходе из метода удаляются. Давайте посмотрим на пример:
Если работа скрипта прекратится из-за возникшей ошибки, деструктор тоже вызовется.
Примечание: при создании объектов класса-наследника, конструкторы класса-родителя не вызываются автоматически. Вызывается только конструктор самого наследника. Тем не менее вы можете вызвать конструктор родителя из класса-наследника таким образом: parent::__construct(). То же самое касается деструкторов. Вызвать деструктор родителя можно так: parent:__destruct().
О на следовании мы поговорим в следующих статьях. А на сегодня все!
PHP | Конструкторы и деструкторы
Конструкторы — это самые основные строительные блоки, которые определяют будущий объект и его природу. Можно сказать, что Конструкторы — это чертежи для создания объектов, предоставляющие значения для функций-членов и переменных-членов.
Как только объект инициализирован, конструктор вызывается автоматически. Деструкторы предназначены для уничтожения объектов и автоматически вызываются в конце выполнения.
В этой статье мы познакомимся с объектно-ориентированными концепциями конструкторов и деструкторов.
Оба являются специальными функциями-членами любого класса с разными понятиями, но одному и тому же имени, за исключением деструкторов, предшествует оператор
Синтаксис:
Типы конструктора:
Наследование. Поскольку Наследование является объектно-ориентированной концепцией, Конструкторы наследуются от родительского класса к дочернему классу, производному от него. Всякий раз, когда дочерний класс имеет свой собственный конструктор и деструктор, они вызываются в порядке приоритета или предпочтения.
Предварительно определенный конструктор по умолчанию: с помощью функции __construct () вы можете определить конструктор.
Примечание. В случае предварительно определенного конструктора (__ construct) и пользовательского конструктора в одном классе предварительно определенный конструктор становится конструктором, а пользовательский конструктор становится обычным методом.
Программа:
echo “Its a User-defined Constructor of the class Tree” ;
echo “Its a Pre-defined Constructor of the class Tree” ;
Выход:
Программа:
// Это инициализация свойств класса
Выход:
Конструкторы начинаются с двух подчеркиваний и обычно выглядят как обычные функции PHP. Иногда эти конструкторы называются магическими функциями, начинающимися с двух подчеркиваний и с некоторыми дополнительными функциональными возможностями, чем обычные методы. После создания объекта некоторого класса, который включает конструктор, содержимое конструктора будет выполнено автоматически.
Примечание. Если у класса PHP есть конструктор, то во время создания объекта вызывается конструктор класса. Конструкторы не имеют возвращаемого типа, поэтому они не возвращают ничего, даже void.
Преимущества использования Конструкторов:
Примечание. Метод __construct () всегда имеет открытый коэффициент видимости.
Программа:
print “Parent class constructor.\n” ;
class ChildClass extends Parentclass
print “Child Class constructor” ;
$obj = new ParentClass();
$obj = new ChildClass();
Выход
Примечание. Каждый раз, когда создается дочерний объект класса, конструктор подкласса будет вызываться автоматически.
Destructor: Destructor также является специальной функцией-членом, которая в точности противоположна методу конструктора и вызывается, когда экземпляр класса удаляется из памяти. Деструкторы (__destruct (void): void) — это методы, которые вызываются, когда нет ссылки на какой-либо объект класса, или выходит из области видимости или собирается выпустить явно.
У них нет типов или возвращаемого значения. Он вызывается только перед удалением памяти для объекта или во время завершения выполнения сценариев PHP или как только контроль выполнения покидает блок.
Глобальные объекты уничтожаются, когда завершается полный скрипт или код. Очистка ресурсов перед освобождением памяти или закрытием файлов происходит в методе деструктора, когда они больше не нужны в коде. Автоматическое уничтожение объектов класса обрабатывается PHP Garbage Collector.
Программа:
echo “In constructor, ” ;
$obj = new Someclass();
Выход:
Примечание. В случае наследования, и если и дочерний, и родительский класс имеют деструкторы, сначала вызывается деструктор производного класса, а затем деструктор родительского класса.
Преимущества деструкторов:
Сравнение между __constructors и __destructors:



