clone with
PHP 🟡 MidDéfinition
Depuis PHP 8.5, clone accepte un second argument : un tableau de propriétés à modifier sur la copie, clone($obj, ['prop' => $v]). Les propriétés readonly y sont modifiables, ce qui permet les méthodes withX() des objets-valeur immuables. __clone() s'exécute avant l'affectation des nouvelles valeurs.
Analogie
Photocopier un formulaire rempli et corriger une seule case sur la copie.
Exemple de code
readonly class Color {
public function __construct(
public int $red,
public int $green,
public int $blue,
public int $alpha = 255,
) {}
public function withAlpha(int $alpha): self {
return clone($this, ['alpha' => $alpha]);
}
}
$c = new Color(255, 0, 0)->withAlpha(128);
Cas d'usage
Objets-valeur et DTO immuables : dériver une variante sans réécrire le constructeur ni contourner readonly par réflexion.
Anti-pattern
Cloner puis muter une propriété readonly hors de clone() : l'écriture reste interdite.
Termes liés
Fiche mise à jour le 2026-09-27