TOC

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;
?>

Как вы можете видеть, деструктор подобен конструктору, отличие лишь в имени. Если вы попробуете запустить данный пример, то сначала увидите сообщение конструктора, затем имя животного, которое мы выводим последней строкой кода, и после этого, когда наш скрипт заканчивается, и объект уничтожается, вызывается деструктор, и выводится сообщение о смерти несчастного животного.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!