ある時点から1日前までのデータを処理したいときには、基準となる日時とその1日前の日時、2つの値を変数が必要だ。
PHP5ではDateTimeオブジェクトのコピーをするには
clone
を使う。
$now = new DateTime; / 現在日時$clone = clone $now; / 現在日時をディープコピー$clone->
modify( '-1 day' ); / 1日引く echo $now->
format( 'Y-m-d' ) . " <->
" . $clone->
format( 'Y-m-d' );/ 2016-12-15 <->
2016-12-14
cloneしないでただ代入すると、2つの変数は繋がったままとなる。
(PHP4まではこの方法でオブジェクトをコピーできていたが、PHP5ではオブジェクトのコピー方法が変わった。)
$now = new DateTime;$clone = $now; / 代入$clone->
modify( '-1 day' );echo $now->
format( 'Y-m-d' ) . " <->
" . $clone->
format( 'Y-m-d' );/ 2016-12-14 <->
2016-12-14参考
オブジェクトのクローンが作成される際、PHP 5 は、そのオブジェクトのプロパティを 全てシャローコピーします。他の変数へのリファレンスを保持する全てのプロパティは、 リファレンスのままとなります。
[PHPプロ!] PHPでの内部変数の扱われ方 – PHP5のオブジェクトコピーでありがちな勘違い
オブジェクト指向で作られたアプリケーションをPHP4からPHP5への移行した経験のある人によく見受けられるのですが、PHP5ではデフォルトでオブジェクトのコピーは参照のコピーとなる、というのは間違いです。確かにオブジェクトは「参照のように」扱うことができますが、正確にはオブジェクトへの参照ではありません。よく似た動きをするので大変間違いやすいのです。
こちらの記事も読まれています
上にスクロール
->
->
->
->