134 votes

Comment copier en profondeur un objet DateTime?

 $date1 = $date2 = new DateTime();
$date2->add(new DateInterval('P3Y'));
 

Maintenant, $date1 et $date2 contiennent la même date - dans trois ans. Je voudrais créer deux dates-heures distinctes, une qui est analysée à partir d'une chaîne et une autre avec trois années ajoutées. Actuellement, je l'ai piraté comme ceci:

 $date2 =  new DateTime($date1->format(DateTime::ISO8601));
 

mais cela semble être un bidouillage horrible. Existe-t-il un moyen "correct" de copier en profondeur un objet DateTime?

188voto

Amy B Points 9363
 $date1 = new DateTime();
$date2 = new DateTime();
$date2->add(new DateInterval('P3Y'));
 

Mettre à jour:

Si vous souhaitez copier plutôt que référencer un objet DT existant, utilisez clone , pas = .

$a = clone $b;

123voto

rjmunro Points 10522

Clonez la date avec l'opérateur de clone :

 $date1 = new DateTime();
$date2 = clone $date1;
$date2->add(new DateInterval('P3Y'));
 

Les clones sont peu profonds par défaut, mais suffisamment profonds pour un DateTime. Dans vos propres objets, vous pouvez définir la méthode magique __clone() pour cloner les propriétés (c'est-à-dire les objets enfants) susceptibles d'être clonées lorsque l'objet parent est modifié.

(Je ne sais pas pourquoi la documentation pense que GTK est un bon exemple de la nécessité de cloner un objet. Qui utilise GTK en PHP?)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X