PHP: Объектно-ориентированный дизайн
2026-02-26 22:57 Diff

PHP поставляется с небольшим набором предопределённых классов, в который входит stdClass. Этот класс имеет особое значение для языка и используется в некоторых ситуациях автоматически.

Первое, что бросается в глаза: stdClass нарушает стандарт именования и начинается с маленькой буквы. Вторая особенность проявляется при работе с ним — в stdClass нет предопределённых свойств и методов, но объекты этого класса могут наполняться любыми свойствами в процессе работы.

Для объектов обычных классов (не stdClass), попытка прочитать значение неопределенного свойства приводит к Notice, который является ошибкой. Однако, даже там можно имитировать поведение stdClass. Делается это с помощью специальных магических методов __get() и __set(). Эти методы вызываются автоматически при обращении к неопределённым свойствам и позволяют создавать их на лету.

Такие объекты очень похожи на ассоциативные массивы, но с объектным синтаксисом. Например, в JavaScript встроен тип данных object, который ведёт себя одновременно и как ассоциативный массив, и как объект из примера выше. В зависимости от желания, к нему можно обращаться и так, и так.

Преобразование типов

Преобразование ассоциативного массива в объект приводит к созданию объекта класса stdClass;

Парсинг JSON

В PHP не разделяются понятия массив и ассоциативный массив, что резко отличается от всех остальных языков и форматов. Например, в JSON это два разных типа данных.

В JSON files содержит массив, а require - ассоциативный массив. Именно в таких ситуациях и подходит stdClass (хотя, откровенно говоря, это - костыль из-за отсутствия нормальных массивов). Функция json_decode() парсит переданный ей JSON и формирует либо массив, либо объект stdClass, в зависимости от того, чем были данные внутри JSON.

Конфигурация

Многие фреймворки используют stdClass для хранения конфигурации, так как она динамическая (то есть состав ключей меняется в зависимости от потребностей разработчика).