Конструктор объекта в ООП на 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
.
Выведите на экран сумму зарплат созданных вами юзеров.