• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:配列とオブジェクトの違い)

配列とオブジェクトの違い

このQ&Aのポイント
  • 初心者が配列とオブジェクトの違いについて疑問を持っています。
  • $now = new DateTime();とした場合に返される値について試行錯誤していますが、現在の時間を取得できません。
  • 配列とオブジェクトの使い方についてわかる方がいれば教えていただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • NARH
  • ベストアンサー率82% (88/107)
回答No.3

なるほど、紛らわしいですよね。 まず、先に日時の表示ですが、 echo $now->format(DateTime::W3C); こんなふうに書いてみましょう。 多分 2011-03-06T15:36:11+09:00 こんな表示がされるかと思います。 これはタイムゾーンを含んだ表示がされています。 世界で決めた基準時間よりも9時間進んでますよという表現がW3Cという団体が決めたフォーマットで表示されています。 #時間の表現は今回のお題では無いと思うので、この辺にしておいて。 さて、なんだこれってのを説明しなくてはならないのですが 質問の配列と思った内容って var_dump($now) したときの結果ですよね。 これはオブジェクトの内部で持っているプロパティが表示されているんです。 で、「オブジェクトは、データと操作がセットになっている」と思ってください。 配列はデータのみですから、この点が違いますね。 で、DateTimeオブジェクト(データが入っていないのでクラスという言い方がいいですね) の説明は http://jp.php.net/manual/ja/class.datetime.php こんな風に書かれてます。 最初にクラス概要とありますが、概要なのでその先に進んで「定義済み定数」があって、そこに先程の DateTime::W3C なんかがチラッと見えたりします。 変数じゃなくて定数なので、これはずっと決まった値です。 で、その先の「目次」からが、このクラスの操作。メソッドと呼ばれるものです。 先ほどの format も 「DateTime::format — 指定した書式でフォーマットした日付を返す」 とありますね。 「DateTime::format」をクリックして先にするんでみると、メソッドの詳細が書かれています。 「public string DateTime::format ( string $format )」 こんな感じ。 これは、format()の括弧の中に フォーマットを表す文字列を与えると、整形して日時を返してくれるということです。 で、皆が使う(つーか世界標準的な)フォーマットは、先程の定数であらかじめ、名前を付けて定義しているということです。 なので echo $now->format('Y年m月d日 H時i分s秒'); ってのもアリです。 でこの元となるデータが先ほどの var_dump()の結果のプロパティです。 オブジェクトとかクラスと言いましたが、ざっくり - クラス - 中身の入っていないお弁当箱(おかずの配置に決まり有り) - オブジェクト - 中身が詰まったお弁当(インスタンスと言われることもある) こんなイメージでいいかと。 なので、クラスを定義する→お弁当箱の仕切りを決める。 new する。インスタンスを取る。オブジェクトを作る→ご飯とかおかずを詰める こんな感じで。(後からおかずをトッピングすることもあり) で、メソッド「DateTime::format(String $format)」の読み方に戻りますが、public string って始まっていますね。 string は結果は文字列で返しますよという意味ですが、public ってのは権限を表しています。 public の他に protected, private とありますが、オブジェクトの外から影響を与えらるのが public です。その他2つはオブジェクトの内部で作用する権限です。 例えば、「DateTime::format(String $format)」では、引数パラメータ $format を解析して、年とか月とかを割り当てなければなりませんね。それを別メソッドとして書いたほうがスッキリまとまると思いますが、そんなメソッドが定義されていると、なんだか使ってみたくなりませんか?その結果肝心の format の戻り値が正確な時間じゃなくなったら困ります。ということで、内部だけに作用する権限にされていると思います。 長文になってしまいましたが、こんなこともできます。 <?php class MyDateTime extends DateTime { const myFormat = 'Y年m月d日H時i分s秒'; public function __toString() { return $this->format(self::myFormat); } } $now = new MyDateTime(); echo $now; ?> ちょっと勉強が必要かもしれませんが、PHPのマニュアルにもいろいろ書かれてますから、遊んでみてください。

bacchus047
質問者

お礼

非常に丁寧な解説、ありがとうございました。 凄く分かりやすいです。 勉強します!!!

その他の回答 (2)

  • noris02
  • ベストアンサー率74% (56/75)
回答No.2

$now = new DateTime(); $now->modify("+1 day"); echo $now->format("Y-m-d"); です

bacchus047
質問者

お礼

ありがとうございました。 おかげさまでできました。

  • notnot
  • ベストアンサー率47% (4900/10361)
回答No.1

マニュアルを読みましょう。 http://jp2.php.net/manual/ja/class.datetime.php 日時を取り出すなら、↓ですね。 http://jp2.php.net/manual/ja/datetime.format.php DateTimeクラスを使うのが目的でなければ、普通の日時関数を使うのがわかりやすいでしょう。 http://jp2.php.net/manual/ja/ref.datetime.php

bacchus047
質問者

お礼

ありがとうございました。 おかげさまでできました。

関連するQ&A

専門家に質問してみよう