スターリングシルバー F HN3009-FY HN3009-FY CROSS/クロス II/センチュリー2】 激安価格 万年筆 スターリングシルバー :0073228076522:NEXT! 【CENTURY-万年筆 PHP: DateTimeオブジェクトのコピー 投稿日 コメントする

HN3009FY

ある時点から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ではデフォルトでオブジェクトのコピーは参照のコピーとなる、というのは間違いです。確かにオブジェクトは「参照のように」扱うことができますが、正確にはオブジェクトへの参照ではありません。よく似た動きをするので大変間違いやすいのです。

コメントを残す コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

スターリングシルバー F HN3009-FY HN3009-FY CROSS/クロス II/センチュリー2】 激安価格 万年筆 スターリングシルバー :0073228076522:NEXT! 【CENTURY-万年筆

上にスクロール