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