This article has been localized into Russian by the community.
Конструкторы и деструкторы
Конструктор и деструктор - это специальные функции, которые автоматически вызываются, когда объект создается и уничтожается. Из этих двух функций конструктор наиболее полезен, в частности потому, что он позволяет вам передавать параметры для создания нового объекта, которые можно использовать для инициализации полей объекта. Вот пример класса с простым конструктором:
class Animal
{
public $name = "No-name animal";
public function __construct()
{
echo "I'm alive!";
}
}
Как вы можете видеть, конструктор выглядит как обычная функция, за исключением того, что его имя начинается с двух подчеркиваний. В PHP функция с двумя подчеркиваниями в начале обычно сообщают о том, что это так называемые "магический функция" (magic function), т.е. функция со специальной целью и дополнительными возможностями по сравнению с обычной функцией. Таким образом, функция с именем "__construct" - это и есть конструктор класса, и она будет вызываться автоматически при создании объекта. Давайте попробуем это сделать:
$animal = new Animal();
Всего лишь одной строкой кода мы создали объект, вызвали конструктор и выполнили весь код внутри конструктора - в нашем случае вывод строки "I'm alive!" ("Я жив!"). Тем не менее, как было отмечено ранее, большим преимуществом конструктора является возможность передавать параметры, которые можно использовать для инициализации переменных. Давайте попробуем:
<?php
class Animal
{
public $name = "No-name animal";
public function __construct($name)
{
$this->name = $name;
}
}
$animal = new Animal("Bob the Dog");
echo $animal->name;
?>
Объявление конструктора с параметрами выглядит точно так же, как объявление обычной функции и передача параметров в нее, но, разумеется, со словом "new", которое мы использовали ранее. Конструктор может иметь сколько угодно параметров.
Деструкторы
Деструктор вызывается при уничтожении объекта. В некоторых языках программирования требуется вручную освобождать память, которую заняли созданные вами объекты (т.е. уничтожать их), но в PHP этим занимается сборщик мусора (Garbage Collector), который следит за объектами и автоматически уничтожает их, когда они больше не нужны. Взгляните на следующий пример, который является расширенной версией предыдущего:
<?php
class Animal
{
public $name = "No-name animal";
public function __construct($name)
{
echo "I'm alive!";
$this->name = $name;
}
public function __destruct()
{
echo "I'm dead now :(";
}
}
$animal = new Animal("Bob");
echo "Name of the animal: " . $animal->name;
?>
Как вы можете видеть, деструктор подобен конструктору, отличие лишь в имени. Если вы попробуете запустить данный пример, то сначала увидите сообщение конструктора, затем имя животного, которое мы выводим последней строкой кода, и после этого, когда наш скрипт заканчивается, и объект уничтожается, вызывается деструктор, и выводится сообщение о смерти несчастного животного.