Copie rapide de DTO ou VO
<?php
class DTO {
public function __construct(
public int $a,
public int $b,
public int $c,
public int $d,
public int $e,
public int $f,
) {}
}
$dto = new DTO(1, 2, 3, 4, 5, 6);
var_dump($dto);
// #PHP 8.2+, with named parameters in arrays
$copy = new DTO(...(['d' => 42] + get_object_vars($dto)));
var_dump($copy);
// #PHP 8.0–1+, with unnamed parameters in arrays
$copy2 = new
DTO(...array_values(array_merge(get_object_vars($dto), ['d' => 42])));
var_dump($copy2);
// #PHP 7.4– : not supported
Une petite astuce PHP combinant les paramètres nommés, le spread et les opérateurs d’union de tableaux pour créer facilement une copie modifiée d’un DTO : https://3v4l.org/ZWX5G#v8.2.10
C’est amusant si vous avez beaucoup de paramètres, mais utiliser une chaîne contenant le nom du paramètre n’est pas vraiment satisfaisant.
Il est possible d’étendre cette syntaxe à PHP 8.0+ avec un array_values() / array_merge() astucieux : https://3v4l.org/igrsW
$copy = new DTO(...(array_values(array_merge(get_object_vars($dto), ['d' => 43]))));
Cependant, cette syntaxe étendue est vulnérable à l’ordre de définition des propriétés, à l’ordre des arguments du constructeur et à la suppression temporaire de propriétés, contrairement à l’approche originale.
See Also
- Arguments de fonctions
- initialize DTO [Try me]
PHP Features
Last updated: 18 September 2026