クラスとオブジェクト

クラスとは

クラスとは変数(メンバ変数)や関数(メンバ関数)などをひとまとめにしたものです。PHPはこのクラスを利用することでプログラミングの効率を向上させることができ、その手法オブジェクト指向と呼ばれています。このオブジェクト指向については、その必要性などがわかりづらいかもしれませんが、PEARやSmartyなどはオブジェクト指向の手法で設計されているので、クラスを作らないまでもその利用方法は覚えておいた方がいいかと思います。

実際に使ってみよう

以下のスクリプトは、日付の書式を「YYYY-MM-DD」や「YYYY/MM/DD」から「YYYY年MM月DD日」にするためのクラスです。MySQLなどのデータベースでは日付は「date型」と呼ばれる形式で保存されており、Webアクセシビリティの観点からそのまま「YYYY-MM-DD」で出力するのも問題だろうと思い作成したものです。date関数とmktime関数などをを組み合わせることも可能なのですが、使用頻度も高そうだったので勉強がてら作成してみました。今回は同一のスクリプト内にクラスとその他の処理を記述していますが、実際にはクラスは「class.php」などの別ファイルに記述したものを呼び出し、他のファイルからも利用が可能になるようにしています。(PHP5ではstrtotime関数とdate関数の組み合わせで同じ結果を得ることができます)

スクリプト

<?php
	class DateToNengappi {
		var $date;
		var $mode;
		function GetNengappi(){
			switch ($this->mode){
				case 1:
					$nengappi = (int)substr($this->date, 5, 2).'月'.\
					(int)substr($this->date, 8, 2).'日';
					break;
				case 2:
					$nengappi = (int)substr($this->date, 0, 4).'年'.\
					(int)substr($this->date, 5, 2).'月'.\
					(int)substr($this->date, 8, 2).'日';
					break;
			}
			return $nengappi;
		}
		function SetDate($date){
			$this->date = $date;
		}
		function SetMode($mode){
			$this->mode = $mode;
		}
	}
	$date = '2011-01-01';
	$obj = new DateToNengappi();
	$obj->SetDate($date);
	$obj->SetMode(2);
	$nengappi = $obj->GetNengappi();
	echo $nengappi;
?>

実行結果

2011年1月1日

解説

class DateToNengappi{ … }
クラスは必ず「class <クラス名>」で開始する必要があります。この場合「DateToNengappi」という名前のクラスであることを定義しています。
var $<変数名>
クラス内で利用するメンバ変数を宣言しています。「public(クラスの外から直接アクセスできる)」か「private(クラスの外から直接アクセスできない)」で定義します。ここで使用している「var」は「public」と同義です。クラスが持つ変数はプロパティと呼ばれています。
function GetNengappi(){ … }
「DateToNengappi」というクラスが持つ関数です。クラスが持つ関数をメソッドと呼びますが、クラス内でなくても「function <関数名>(<引数>){ <処理内容> }」という形式で、自作の関数を定義することが可能です。
switch ($this->mode){ … }
switch構文による条件分岐です。「$this->mode」はこのクラスのメンバ変数「mode」になります。この値が1のときは「MM年DD日」2のときは「YYYY年MM年DD日」という処理結果を返します。なお、substr関数の前に「(int)」とつけているのは、関数の結果が整数であることを宣言するためで「01」なら「1」、「02」なら「2」という具合に、頭の「0」を取り除くための処理です。
return $nengappi
関数「GetNengappi」の処理結果として変数「$nengappi」を返します。
function SetDate($date){ … }
関数「SetDate」の引数として受け取った「$date」の値をメンバ変数「date」に代入しています。次の行も同様の作業です。最終的な処理を実行する前に必要な値を受け取りメンバ変数にセットすることが多いので、クラスでは良く見かける処理です。メインの処理より後に記述されていますが、ここで受け取った値を基に関数「GetNengappi」を実行しています。
$obj = new DateToNengappi()
クラス「DateToNengappi」からnew演算子によりオブジェクト「$obj」を生成しています。
$obj->SetDate($date)
->(アロー演算子)でメソッド「SetDate」を実行し、クラス「DateToNengappi」に変数「$date」の値を渡しています。
$obj->SetMode(2)
->(アロー演算子)でメソッド「SetMode」を実行し、クラス「DateToNengappi」に「2」の値を渡しています。メソッド「GetNengappi()」を実行した際に、この値が「1」なら月日、「2」なら年月日を返すようにしているからです。
$nengappi = $obj->GetNengappi()
メソッド「GetNengappi」の結果を「$nengappi」に代入しています。

▲ページトップに戻る