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

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

Конструкторы представляют собой магические методы ООП, которые выполняются при создании объекта и служат для начальной инициализации его свойств. Для создания конструктора надо объявить функцию с именем __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.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг