从 PHP 8.1 开始
使用只读属性和提升构造函数创建 DTO 对象非常容易
这很容易打包成一个紧凑的字符串,并转换回对象。
<?php
function cvtObjectToJson( object $poObject ): string
{
return json_encode( array_values( get_object_vars( $poObject )));
}
function cvtJsonToObject( string $psClass, string $psString ): object
{
return new $psClass( ...json_decode( $psString ));
}
final class exampleDto
{
final public function __construct(
public readonly int $piInt,
public readonly ?int $pnNull,
public readonly float $pfFloat,
public readonly string $psString,
public readonly array $paArray,
public readonly object $poObject,
){}
}
$exampleDtoO = new exampleDto( 1, null, .3, 'string 4', [], new stdClass() );
$stringJson = cvtObjectToJson( $exampleDtoO );$objectO = cvtJsonToObject( exampleDto::class, $stringJson );
echo $exampleDtoO == $objectO
? '对象相等,但不相同。'. PHP_EOL
: '对象不相等也不相同。'. PHP_EOL
;
var_dump($exampleDtoO, $stringJson, $objectO);