Полный цикл в digital

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

Конструкторы представляют собой магические методы ООП, которые выполняются при создании объекта и служат для начальной инициализации его свойств. Для создания конструктора надо объявить функцию с именем __construct (с двумя подчеркиваниями впереди):

<?
class Person
{
    public $name, $age;
    function __construct($name, $age)
    {
        $this->name = $name;
        $this->age = $age;
    }
    function displayInfo()
    {
        echo "Name: $this->name; Age: $this->age<br>";
    }
}
$tom = new Person("Tom", 36);
$tom->displayInfo();
$bob = new Person("Bob", 41);
$bob->displayInfo();

Функция конструктора в данном случае принимает два параметра. Их значения передаются свойствам класса. И теперь чтобы создать объект, нам надо передать значения для соответствующих параметров:

$tom = new Person("Tom", 36);

Вывод браузера:

Name: Tom; Age: 36
Name: Bob; Age: 41

Параметры по умолчанию

Чтобы сделать конструктор более гибким, мы можем обозначить один или несколько параметров в качестве необязательных. Тогда при создании объекта необязательно указывать все параметры. Например, изменим конструктор следующим образом:

function __construct($name="Том", $age=36) {
    $this->name = $name;
    $this->age = $age;
}

Таким образом, если не будут заданы параметры, вместо них будут использоваться значения Том и 36. И теперь мы можем создать объект Person несколькими способами:

<?
class Person
{
    public $name, $age;
    function __construct($name = "Том", $age = 36)
    {
        $this->name = $name;
        $this->age = $age;
    }
    function displayInfo()
    {
        echo "Name: $this->name; Age: $this->age<br>";
    }
}
$tom = new Person();
$tom->displayInfo();
$bob = new Person("Bob");
$bob->displayInfo();
$sam = new Person("Sam", 29);
$sam->displayInfo();

Вывод браузера:

Name: Том; Age: 36
Name: Bob; Age: 36
Name: Sam; Age: 29

Объявление свойств через конструктор

Начиная с версии PHP 8 в языке появилась возможность определить свойства через список параметров конструктора. Любой параметр конструктора, который имеет модификатор доступа, например, public, будет автоматически представлять новое свойство.

Например, определим свойства name и age напрямую через параметры конструктора:

<?
class Person
{
    function __construct(public $name, public $age)
    {
        $this->name = $name;
        $this->age = $age;
    }
    function displayInfo()
    {
        echo "Name: $this->name; Age: $this->age<br>";
    }
}
$tom = new Person("Tom", 36);
$tom->displayInfo();

Хотя в данном случае в классе явным образом не определены свойства name и age, но поскольку в списке параметров конструктора заданы параметры с такими именами и с модификатором доступа в данном случае public, то у класса автоматически создаются подобные переменные.

Можно сочетать оба способа объявления переменных:

<?
class Person
{
    public $name;
    function __construct($name, public $age)
    {
        $this->name = $name;
        $this->age = $age;
    }
    function displayInfo()
    {
        echo "Name: $this->name; Age: $this->age<br>";
    }
}

При подобном объявлении свойств также можно передавать им значения по умолчанию:

<?
class Person
{
    public $name;
    function __construct($name = "Sam", public $age = 33)
    {
        $this->name = $name;
        $this->age = $age;
    }
    function displayInfo()
    {
        echo "Name: $this->name; Age: $this->age<br>";
    }
}

Деструкторы

Деструкторы представляют собой магические методы ООП и служат для освобождения ресурсов, используемых программой - для освобождения открытых файлов, открытых подключений к базам данных и т.д. Деструктор объекта вызывается самим интерпретатором PHP после потери последней ссылки на данный объект в программе.

Деструктор определяется с помощью функции __destruct (два подчеркивания впереди):

<?
class Person
{
    public $name, $age;
    function __construct($name, $age)
    {
        $this->name = $name;
        $this->age = $age;
    }
    function getInfo()
    {
        echo "Имя: $this->name ; Возраст: $this->age <br>";
    }
    function __destruct()
    {
        echo "Вызов деструктора";
    }
}
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг