オブジェクトのコピーの挙動が4と5で違う

今更PHP5の話。

いや、なにげに最後に開発したのがPHP4の環境で、その後ブランクもあったりするもんだから今回初めてPHP5で開発してる訳で。

<?php
$dt1 = new DateTime();
$dt2 = new DateTime();

foreach ($xxx as $yyy) {
    $dt = new DateTime();
    $dt1 = $dt;
    $dt2 = $dt;
...
}

$dt1->mofify("-7 day");
$dt2->modify("+7 day");

とかしたら怒られて「ナンデ?」と調べてみたら。

※PHP4ではデフォルト(方法を未指定の場合)ではディープコピー(値渡し)とみなされましたが、PHP5ではデフォルトでシャローコピー(参照渡し)とみなされます。
オブジェクトのコピー | オブジェクト指向PHP

mjk。


ということで

<?php
$dt1 = new DateTime();
$dt2 = new DateTime();

foreach ($xxx as $yyy) {
    $dt = new DateTime();
    $dt1 = clone $dt;
    $dt2 = clone $dt;
...
}

$dt1->mofify("-7 day");
$dt2->modify("+7 day");

としたら怒られなくなった。ホントにこれでいいのか。