Объект

Оригинальное название: object

Коротко

Конкретный экземпляр данных в программе, у которого есть собственные значения свойств и действия, доступные через методы; в ООП объекты создаются по описанию класса.

Что такое «Объект»

Если класс — чертёж, то объект — изделие по нему. Класс «Заказ» описывает, что у заказа есть номер, сумма и статус и что его можно оплатить. Объект — заказ № 1024 на 7300 со статусом «новый». Объектов одного класса может быть сколько угодно, и у каждого свои значения. Сами значения хранятся в свойствах.

Объект в PHP и в JavaScript

В PHP объект почти всегда создаётся оператором new из класса. Для простых случаев есть безымянный stdClass, и его же возвращает json_decode() без второго аргумента. В JavaScript объект можно описать литералом без всякого класса: { id: 1024, status: 'new' }. Классы появились в языке позже и работают поверх прототипов. Формат JSON вырос именно из этого литерального синтаксиса.

Пример: объект передаётся не копией

Важное отличие объектов от чисел и строк — при передаче в функцию копия не создаётся. Функция получает доступ к тому же самому объекту:

$order = new stdClass();
$order->status = 'new';

function markPaid(object $o): void { $o->status = 'paid'; }

markPaid($order);
echo $order->status;          // paid — функция изменила исходный объект

$copy = clone $order;
$copy->status = 'cancelled';  // $order остался 'paid'

В JavaScript то же самое: присваивание const b = a не копирует объект, а даёт второе имя для него. Поверхностную копию делают через { ...a }, глубокую — функцией structuredClone().

Как сравнивают объекты

В PHP оператор == считает два объекта равными, если они одного класса и с одинаковыми значениями свойств. Оператор === — только если это один и тот же экземпляр. В JavaScript === для объектов всегда сравнивает ссылки, поэтому {a: 1} === {a: 1} даёт false. Это частая причина ошибок при проверке «изменились ли данные» в интерфейсе. Как объекты складываются в программу и взаимодействуют друг с другом, описывает ООП.

Обновлено:

Все термины раздела «Backend»

Что будем искать? Например,Продвижение