Классы и объекты
До сих пор данные и функции существовали отдельно. Объект объединяет их: он хранит данные и умеет с ними работать. Такой подход называется объектно-ориентированным программированием, или ООП.
Класс и объект
Класс — это чертёж, а объект — изделие, сделанное по нему. Класс описывает, какие данные есть у объекта; сам объект создаётся оператором new:
<?php
class User
{
public string $name = 'Гость';
}
$user = new User();
$user->name = 'Анна';
echo $user->name; // АннаПеременные внутри класса называются свойствами. К свойству объекта обращаются через стрелку ->, причём знак $ перед именем свойства не ставится.
Методы
Функция внутри класса называется методом. Внутри метода текущий объект доступен через $this:
<?php
class User
{
public string $name = 'Гость';
public function greet(): string
{
return "Привет, {$this->name}!";
}
}
$user = new User();
$user->name = 'Анна';
echo $user->greet(); // Привет, Анна!Метод работает с данными именно того объекта, у которого его вызвали.
Объекты независимы
По одному классу можно создать сколько угодно объектов, и у каждого будут свои значения свойств:
<?php
class User
{
public string $name = 'Гость';
}
$first = new User();
$second = new User();
$first->name = 'Анна';
echo $first->name, "\n"; // Анна
echo $second->name; // ГостьПрисваивание не копирует объект
В переменной лежит не сам объект, а ссылка на него. После присваивания обе переменные указывают на один и тот же объект:
<?php
class User
{
public string $name = 'Гость';
}
$a = new User();
$b = $a;
$b->name = 'Олег';
echo $a->name; // ОлегЧтобы получить независимую копию, используют оператор clone: $b = clone $a;.
Частая ошибка
Внутри метода легко написать $name вместо $this->name. Это разные вещи: $name — обычная локальная переменная, которой не существует, и PHP выдаст предупреждение Undefined variable.