オブジェクトで日付を扱おう

メンバーシップ(月額 980円)になって、このページの動画を見よう

前の記事で、次のようなプログラムを作成しました。

<?php
date_default_timezone_set('Asia/Tokyo');
echo '現在は、', date('G時 i分 s秒'), 'です';

このプログラムによって、プログラムを実行した時刻を表示できますが、このようなプログラムの作り方を「構造化プログラミング」などと呼びます。これは、古くからあるプログラミングの手法で、現在はあまり一般的ではありません。

現在はそれに変わり「オブジェクト指向プログラミング」と呼ばれる手法が採用されます。PHPは、かなり古いプログラミング言語なので、基本的な作りは構造化プログラミングが採用されています。しかし、その後オブジェクト指向プログラミングも取り入れられ、現在では両方が混在した形になっています。

先のプログラムも、構造化プログラミングの形でもオブジェクト指向プログラミングの形でも制作することができます。そこで今回は、オブジェクト指向プログラミングで同じプログラムを作成してみましょう。

オブジェクトを準備しよう

まずは、新しいファイルを作成したら、次のようなプログラムを作成します。

<?php
$today = new DateTime();

これにより、今日の日時を準備した「オブジェクト」というものが準備されます。「DateTime」というのが、オブジェクトの元になるもので「クラス」と呼びます。ここでは、「new」という記述を使って、DateTimeクラスから派生した現在の日時を持ったオブジェクトを作り、これを「$today」という変数に代入しました。この変数を特別に「インスタンス」と呼びます。

メソッドを利用しよう

では次に、このインスタンスを使って日付を出力してみましょう。次のように書き加えます。

<?php
$today = new DateTime();
echo '現在は、' . $today->format('G時 i分 s秒') . 'です';
?>

これで、同じように現在時刻が表示されました。

こちらもタイムゾーンが違う場合は、次のように書き加えるとタイムゾーンを変更できます。

<?php
$today = new DateTime();
$today->setTimezone(new DateTimeZone('Asia/Tokyo'));
echo '現在は、' . $today->format('G時 i分 s秒') . 'です';
?>

これで正しいタイムゾーンで表示されます。

オブジェクト指向で、現在時刻を取得するには次のように記述します。

$today->format('...')

先ほど準備した$todayに「->」というハイフンと不等号を組み合わせると、その後に「メソッド」というものを記述できるようになります。

メソッドというのは「機能」といった意味だと考えていただければ良いでしょう。ここでは、formatというメソッドを利用して、書式を整えて日時を取得するという意味になります。パラメーターは、先のdateファンクションと同じです。

オブジェクト指向プログラミングはこのように、まずオブジェクトを準備し、そのオブジェクトが持っているメソッドや後で紹介する「プロパティ」というものを使ってプログラムを作成していくというスタイルです。

書くものが増えて、若干面倒に感じますが、このように目的別にできる事が分類されているため、分かりやすくプログラムを作成することができます。小規模なプログラムではあまり効率よくありませんが、大規模なプログラムになるほど、効率よく開発することができます。

ともすたチャンネルに
チャンネル登録する