JSON в PHP Class
Генерируйте типизированные PHP-классы из JSON прямо в браузере.
Для чего это нужно
JSON в типизированный PHP-класс
Современный PHP 8.x
Генерирует код с продвижением конструктора, readonly-свойствами и типизированными свойствами по лучшим практикам современного PHP.
100% приватно
Ваш JSON (который может содержать чувствительные данные) обрабатывается только в вашем браузере. Никогда не отправляется ни на какой сервер.
Корректная типизация
Автоматически определяет string, int, float, bool и null. Необязательные поля помечаются как nullable (?type).
Мгновенно
PHP-классы готовы за миллисекунды. Никакой регистрации, ожидания и ограничений.
Как это работает
Три шага — никаких сложностей
Вставьте ваш JSON
Вставьте любой JSON-объект — простой или вложенный. Инструмент автоматически анализирует структуру и типы данных.
PHP-класс сгенерирован
Вы получаете PHP-класс с типизированными свойствами (PHP 7.4+), продвижением конструктора (PHP 8.0+) и опциональными методами-геттерами.
Скопируйте и используйте
Скопируйте код одним кликом и вставьте в ваш проект. Работает с Laravel, Symfony или чистым PHP.
FAQ
Остались вопросы?
PHP 7.4 (выпущен в ноябре 2019 года) ввёл типизированные свойства, позволяющие объявлять тип каждого свойства прямо в классе: public int $id; public string $name; public ?float $price;. Это фундаментальное улучшение по сравнению с более ранними версиями, где типы можно было указывать только в PHPDoc. Типизированные свойства улучшают обнаружение ошибок во время выполнения, читаемость кода и позволяют IDE предлагать лучшее автодополнение. Nullable-тип (с ?) указывает, что свойство может быть null, что полезно для необязательных полей JSON.
Продвижение конструктора (constructor property promotion), введённое в PHP 8.0 (2020), позволяет определять и назначать свойства прямо в параметрах конструктора, устраняя избыточность. Вместо объявления свойства, его перечисления в конструкторе и присваивания в теле достаточно написать: public function __construct(public readonly string $name, public int $age) {}. Это резко сокращает шаблонный код и является предпочтительным паттерном в современном PHP, особенно для Value Objects и DTO.
Генерируются стандартные геттер-методы по соглашению PHP: getName(), getId(), getPrice(). Геттеры инкапсулируют доступ к приватным или защищённым свойствам, позволяя добавлять логику преобразования в будущем без изменения публичного интерфейса класса. При использовании продвижения конструктора с публичными или readonly-свойствами геттеры необязательны. Для приватных свойств геттеры — единственный способ получить значение извне класса.
Модели Eloquent расширяют Illuminate\Database\Eloquent\Model и предназначены для представления записей базы данных с интегрированным ORM. Чистые PHP-классы (POPO, Plain Old PHP Objects) лучше подходят для DTO, API-ответов или когда персистентность не нужна. Если вы потребляете внешний API и хотите смоделировать JSON-ответ, чистый PHP-класс, сгенерированный данным инструментом, — правильный выбор. Laravel API Resources (введены в Laravel 5.5) также используют чистые классы для трансформации моделей Eloquent в JSON.
Для каждого вложенного объекта в JSON генерируется отдельный PHP-класс. Например, если JSON содержит {"user": {"address": {"city": "Москва"}}}, генерируются три класса: корневой класс со свойством $user типа User, класс User со свойством $address типа Address и класс Address со свойством $city типа string. Это следует принципу единственной ответственности и корректно отображает сложные структуры API. Массивы объектов типизируются как array с типом элемента в PHPDoc.
Эволюция PHP 8.x, Laravel API Resources и Symfony Serializer
PHP претерпел кардинальные изменения от PHP 7.0 (2015) до PHP 8.3 (2023). PHP 7.4 ввёл типизированные свойства и nullsafe-оператор. PHP 8.0 принёс объединённые типы, именованные аргументы, выражения match и продвижение конструктора. PHP 8.1 добавил readonly-свойства, нативные перечисления, файберы и типы пересечений. PHP 8.2 представил readonly-классы. PHP 8.3 завершил работу с readonly в анонимных классах. Эта эволюция превращает PHP в язык с опциональной статической типизацией, сопоставимой с TypeScript или Kotlin.
В экосистеме Laravel (наиболее популярный PHP-фреймворк с более чем 75 миллионами загрузок) API Resources (введены в Laravel 5.5, 2017) — стандартный способ трансформации моделей Eloquent в JSON-ответы. Для противоположного случая — потребления внешних API — рекомендуемый паттерн — DTO, реализованные как чистые PHP-классы. Пакет spatie/laravel-data (2021) объединяет оба концепта: класс, который может выступать одновременно DTO и API Resource.
Компонент Symfony Serializer (также используемый API Platform — наиболее продвинутым PHP-фреймворком для REST/GraphQL API) может сериализовать и десериализовать PHP-объекты в/из JSON, XML, YAML и CSV. Он использует аннотации, PHP 8-атрибуты или YAML-конфигурацию для маппинга свойств. JMS Serializer — ещё одна популярная альтернатива. В проектах, потребляющих API, паттерн генерации PHP-классов из JSON с последующим использованием Symfony Serializer для гидратации объектов — профессиональный рабочий процесс, чётко разделяющий транспортный слой (JSON) и доменный слой (PHP-объекты).