PHP code example of petrenkoanton / php-dto

1. Go to this page and download the library: Download petrenkoanton/php-dto library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

petrenkoanton / php-dto example snippets




declare(strict_types=1);

use Dto\Dto;

/**
 * @method int getPrice()
 * @method string getType()
 * @method array getInfo()
 * @method bool isAvailable()
 */
class ProductDto extends Dto
{
    protected int $price;
    protected string $type;
    protected array $info;
    protected bool $available;
}

// Array or instance of Arrayable interface
$info = [
    'key' => 'value',
];

$data = [
    'price' => 999,
    'type' => 'ticket',
    'info' => $info,
    'available' => true,
];

$dto = new ProductDto($data);

$price = $dto->getPrice(); // 999
$type = $dto->getType(); // 'ticket'
$info = $dto->getInfo(); // ['key' => 'value']
$available = $dto->isAvailable(); // true



declare(strict_types=1);

use Collection\Arrayable;
use Dto\Dto;
use Dto\DtoCollection;

/**
 * @method string getName()
 * @method int getAge()
*/
class PersonDto extends Dto
{
    protected string $name;
    protected int $age;
}

class PersonDtoCollection extends DtoCollection
{
    public function __construct(PersonDto ...$items)
    {
        parent::__construct(...$items);
    }
}

/**
 * @method int getPrice()
 * @method string getType()
 * @method array getInfo()
 * @method bool isAvailable()
 */
class ProductDto extends Dto
{
    protected int $price;
    protected string $type;
    protected array $info;
    protected bool $available;
}

enum ColorEnum: string
{
    case Red = 'red';
    case Black = 'black';
    case White = 'white';
}

/**
 * @method PersonDtoCollection getPersons()
 * @method ProductDto getProduct()
 * @method ColorEnum getColor()
 */
class NestedDto extends Dto
{
    protected PersonDtoCollection $persons;
    protected ProductDto $product;
    protected ColorEnum $color;
}

class NestedDtoFactory
{
    public function create(array $data): NestedDto
    {
        return new NestedDto($data);
    }
}

class InfoArrayable implements Arrayable
{
    public function toArray(): array
    {
        return [
            'key' => 'value',
        ];
    }
}

$data = [
    'persons' => [
        [
            'name' => 'Alice',
            'age' => 25,
        ],
        [
            'name' => 'Bob',
            'age' => 30,
        ],
    ],
    'product' => [
        'price' => 999,
        'type' => 'ticket',
        'info' => new InfoArrayable(),
        'available' => true,
    ],
    'color' => 'red',
];

$nestedDto = (new NestedDtoFactory())->create($data);

$personsCount = $nestedDto->getPersons()->count() // 2

$aliceDto = $nestedDto->getPersons()->first();
$aliceName = $aliceDto->getName(); // 'Alice'
$aliceAge = $aliceDto->getAge(); // 25

$bobDto = $nestedDto->getPersons()->filter(
    fn (PersonDto $personDto) => $personDto->getName() === 'Bob'
)->first();
$bobName = $bobDto->getName(); // 'Bob'
$bobAge = $bobDto->getAge(); // '30'

$productDto = $nestedDto->getProduct();
$productPrice = $productDto->getPrice(); // 999
$productInfo = $productDto->getInfo(); // ['key' => 'value']

$color = $nestedDto->getColor(); // ColorEnum::Red
$colorValue = $colorEnum->value; // 'red'



declare(strict_types=1);

use Dto\Dto;
use Dto\KeyCase;

/**
 * @method int getActualNumber()
 * @method string getProviderName()
 */
class SnakeCaseDto extends Dto
{
    protected int $actualNumber;
    protected string $providerName;
}

$data = [
    'actualNumber' => 5,
    'providerName' => 'Main Provider',
];

$dto = new SnakeCaseDto($data);

$array = $dto->toArray(); // ['actualNumber' => 5, 'providerName' => 'Main Provider']
$arrayWithSnakeCaseKeys = $dto->toArray(KeyCase::SNAKE_CASE); // ['actual_number' => 5, 'provider_name' => 'Main Provider']
bash
composer