クラスとオブジェクトの基礎
クラスとは「データの設計図」です。
例えば、「果物」を表すクラス「fruit」を作って見ましょう。
class Fruit{
public $name;
public $price;
public $weight;
}
このように定義すると、「名前」「値段」「重さ」をもつデータ型 Fruitを作成できるようになります。
作成したデータ型 Fruitは
$apple = new Fruit();
とすることで、実際にFruit型のデータを作成できます。
Fruit型のデータには名前と値段と重さを設定することができます。
$apple->name = 'apple';
$apple->price = 150;
$apple->weight = 100;
とすることで、名前がapple、値段が150、重さが100のFruitを作成することができます。
$apple = array(
'name' => 'apple',
'price' => 150,
'weight' => 100
);
という連想配列を作成するのによく似ています。連想配列は任意のキーをいつでも追加できますが、今回作成したFruitというデータ型は、常に「名前」「値段」「重さ」の3つしか定義できないのがポイントです。 作成したFruitクラスのデータは
print $apple->name;
print $apple->price;
print $apple->weight;
のようにすることで、連想配列と同じようにデータを参照することができます。
クラスを利用して作成されたデータのことを「オブジェクト」と呼びます。また、$apple->nameのような各項目のこと「プロパティ」と呼びます。例えば「Fruit型のオブジェクトappleのnameプロパティ」といった使い方になります。
メソッド
クラスにはプロパティだけではなくメソッドを追加することができます。試しに、Fruitクラスのオブジェクトに自己紹介のメソッドを追加して見ましょう。
class Fruit{
public $name;
public $price;
public $weight;
public function introduce(){
print '私の名前は' . $this->name . 'です。';
}
}
このようにすることで、クラスにメソッドを追加することができます。
追加されたメソッドを呼び出す時には
// まずオブジェクトを作成
$apple = new Fruit();
$apple->name = 'apple';
$apple->price = 150;
$apple->weight = 100;
// メソッドの呼び出し
$apple->introduce(); // 私の名前はappleです。
のように、関数と同様カッコをつけて呼び出します。
class Fruit{
public $name;
public $price;
public $weight;
// introduceメソッドに引数を追加
public function introduce($person){
print $person . 'さん、こんにちは!';
print '私の名前は' . $this->name . 'です。';
}
}
上記のようにすることで、引数を利用することも可能です。
コンストラクタ
現在のFruitクラスは、作成する時に
$apple = new Fruit();
$apple->name = 'apple';
$apple->price = 150;
$apple->weight = 100;
と各項目に値を設定する必要があり、少し面倒です。
classを作成する際にコンストラクタを定義することで、簡単に値を設定できるようになります。
まず、Fruitクラスにコンストラクタを追加します。
class Fruit{
public $name;
public $price;
public $weight;
public function introduce($person){
print $person . 'さん、こんにちは!';
print '私の名前は' . $this->name . 'です。';
}
// コンストラクタを追記
public function __construct($name, $price, $weight){
$this->name = $name;
$this->price = $price;
$this->weight = $weight;
}
}
上記のようにすることで
$apple = new Fruit('apple', 150, 100);
の1行で項目設定まで行えるようになります。
コンストラクタの仕組み
コンストラクタはnewというキーワードをを利用して データを作成する時に自動的に呼び出されます。
$apple = new Fruit('apple', 150, 100);
とすると自動的に__constructが呼び出されます。
$apple = new Fruit();
$apple->__construct('apple', 150, 100);
という2つの処理が同時に行われていると考えると良いでしょう。
演習
- taro、pochi、chappyというDogクラスの3つのオブジェクトを作成し、それぞれに自己紹介をさせて見ましょう。Dogクラスのオブジェクトは名前、犬種、重さの3つのプロパティを持つものとします。
- 自己紹介の時に、名前だけでなく犬種と重さも伝えるようにして見ましょう。