clone with

PHP 🟡 Mid

Dé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.
#core#php85

Fiche mise à jour le 2026-09-27

← → au clavier pour passer d'une fiche à l'autre