Цей PHP пакет Data Model пропонує легкий та невимушений спосіб рекурсивно заповнювати типобезпечні PHP-об'єкти. Він використовує рефлексію та атрибути PHP для гідратації об'єктів та їх ініціалізації на основі типових підказок:
class Address
{
use \Zerotoprod\DataModel\DataModel;
public string $street;
public string $city;
}
class User
{
use \Zerotoprod\DataModel\DataModel;
public string $username;
public Address $address;
}
$User = User::from([
'username' => 'John Doe',
'address' => [
'street' => '123 Main St',
'city' => 'Hometown',
],
]);
echo $User->address->city; // Hometown
# Основні можливості
- Спрощена гідратація об'єктів: Забудьте про ручне присвоєння властивостей та повторюваний код. DataModel автоматизує цей процес, забезпечуючи правильне заповнення об'єктів на основі їхніх типів.
- Гарантія типобезпечності: Типобезпечність забезпечується самою PHP. Використовуючи DataModel, ви можете бути впевнені, що ваші об'єкти містять очікувані типи без додаткової валідації.
- Зменшення захисного програмування: Замість написання захисного коду для перевірки та очищення даних, DataModel дозволяє визначити, як кожна властивість має бути оброблена перед гідратацією об'єкта.
- Гнучке вирішення значень: За допомогою атрибута #[Describe()] ви контролюєте, як обробляються значення для кожної властивості, включаючи трансформації, значення за замовчуванням та користувацьке приведення. Це гарантує, що ваша модель даних працює так, як ви задумали.
- Невимушена інтеграція: Просто додайте trait DataModel до своїх класів. Немає потреби розширювати базові класи чи імплементувати інтерфейси, що дозволяє зберігати чистоту вашої ієрархії класів.
Цей пакет також містить розширені можливості, такі як обов'язкові властивості, що забезпечуються через атрибут PHP:
use Zerotoprod\DataModel\Describe;
class User
{
use \Zerotoprod\DataModel\DataModel;
#[Describe(['required' => true])]
public string $username;
public string $email;
}
User::from(['email' => 'john@example.com']);
// Викидає виняток PropertyRequiredException:
// Властивість: username є обов'язковою
Додаткові пов'язані пакети також пропонують хелпери, фабрики, трансформери та інше. Ви можете ознайомитися з цим пакетом, прочитавши документацію; вихідний код також доступний на GitHub за посиланням zero-to-prod/data-model.