# Конструктор объекта в ООП на PHP

Давайте рассмотрим следующий код:

`<?php // Класс с публичными свойствами name и age: class User { public $name; public $age; } // Создаем объект класса: $user = new User; // Записываем данные: $user->name = 'john'; $user->age = 25; // Прочитываем данные: echo $user->name; // выведет 'john' echo $user->age; // выведет 25 ?>`

В данном коде не очень удобно то, что легко можно забыть записать данные в какое-нибудь свойство объекта, особенно если этих свойств много.

Было бы удобно этот код:

`<?php // Создаем объект класса: $user = new User; // Записываем данные: $user->name = 'john'; $user->age = 25; ?>`

Заменить на вот этот:

`<?php $user = new User('john', 25); // создадим объект, сразу заполнив его данными ?>`

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

Для решения проблемы нам поможет метод конструктор с названием `__construct`. Суть в следующем - если в коде класса существует метод с таким названием - он будет вызываться в момент создания объекта:

`<?php class User { public $name; public $age; // Конструктор объекта: public function __construct() { echo '!!!'; } } $user = new User; // выведет '!!!' ?>`

Конструктор в общем-то такой же метод, как и все остальные и может принимать параметры, смотрите на примере:

`<?php class User { public $name; public $age; public function __construct($var1, $var2) { echo $var1 + $var2; // найдем сумму параметров } } $user = new User(1, 2); // выведет 3 ?>`

Итак, давайте переделаем наш код, применив конструктор:

`<?php class User { public $name; public $age; // Конструктор объекта: public function __construct($name, $age) { $this->name = $name; // запишем данные в свойство name $this->age = $age; // запишем данные в свойство age } } $user = new User('john', 25); // создадим объект, сразу заполнив его данными echo $user->name; // выведет 'john' echo $user->age; // выведет 25 ?>`

Сделайте класс `Employee`, в котором будут следующие публичные свойства - `name`, `age`, `salary`. Сделайте так, чтобы эти свойства заполнялись в конструкторе при создании объекта.

Создайте объект класса `Employee` с именем `'eric'`, возрастом `25`, зарплатой `1000`.

Создайте объект класса `Employee` с именем `'kyle'`, возрастом `30`, зарплатой `2000`.

Выведите на экран сумму зарплат созданных вами юзеров.

←→
↑