Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Классы и объекты

До сих пор данные и функции существовали отдельно. Объект объединяет их: он хранит данные и умеет с ними работать. Такой подход называется объектно-ориентированным программированием, или ООП.

Класс и объект

Класс — это чертёж, а объект — изделие, сделанное по нему. Класс описывает, какие данные есть у объекта; сам объект создаётся оператором 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.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.