クラスとは?
状態:-
閲覧数:5,341
投稿日:2010-04-26
更新日:2016-12-19
オブジェクトとしての基本的な「性質」や「構造」を定義した設計図のこと
・「class」というキーワードの後ろに好きなクラス名を記述
・クラスの開始と終了を表す「{」「}」を記述
単にクラスを定義しただけで何の機能も持たないクラス
・「class」というキーワードの後ろに好きなクラス名を記述
・クラスの開始と終了を表す「{」「}」を記述
単にクラスを定義しただけで何の機能も持たないクラス
class Product{
}
}
クラスの基本構造
基本構造
「プロパティ」と呼ばれるクラス独自の変数と、「メソッド」と呼ばれるクラス独自の関数を保持
・オブジェクトとしてどのようなデータや処理を持つかを、設計図としてのクラスに「プロパティ」や「メソッド」という形で定義している
プロパティ | メソッド |
---|---|
変数 クラスのメンバー変数 |
関数 クラスのメンバー関数 |
メンバーとは?
「プロパティ」や「メソッド」など、クラス構成物を指す
・イメージとしては、日本語の「の」
・「クラスのメンバー変数」=「クラス独自の変数」
・「クラスのメンバー関数」=「クラス独自の関数」
同義語
・「プロパティ」=「クラスのメンバー変数」=「属性」=「フィールド」
・「メソッド」=「クラスのメンバー関数」
作法
※PHPでは、(クラス定義時に)宣言しないプロパティの読み書きも可能
→あらかじめアクセス修飾子をつけて宣言しておくべき(パーフェクトPHP P125)
アクセス修飾子
概要
・プロパティやメソッドはそれぞれ、クラス外部からアクセスが可能かどうか、修飾子で設定を行う
修飾子 | プロパティ | 説明 |
---|---|---|
private | $name; | 「private修飾子」→外部からのアクセス不可 |
public | function getName() | 「public修飾子」→外部からのアクセス可 |
クラスのメンバーへアクセスする書式
クラス書式
クラスのメンバーへアクセスするには、「->(アロー演算子)」を利用
・イメージとしては、日本語の「の」みたいなもの
書式 | 説明 |
---|---|
$**->○○(); | オブジェクトが持つプロパティやメソッドを利用 |
$this->△△ | 特別な変数。メソッド内で、そのクラスのプロパティやメソッドを使用する際に利用 |
例
プロパティ定義例
※プロパティを定義しただけで、どこからも呼び出していないので、結果には何も表示されない)
class Product{
private $name; // 商品名。「private修飾子」→外部からのアクセス不可
private $price; // 価格。「private修飾子」→外部からのアクセス不可
}
同じクラスをもとに生成された複数のインスタンス同士は全く関わりがない
概要
同じクラスをもとに生成された複数のインスタンス同士は全くかかわりがない(個々のインスタンスは完全に独立している)
・言い換えると、クラスが同じなので性質は同じだが、各インスタンスが保持しているデータはインスタンス独自のもの(他のインスタンスへは一切影響を与えない=クラスとインスタンスの関係は1対1ではない)
確認してみる
・同じクラスをもとに生成された複数インスタンスの内、1インスタンスのプロパティだけ値を変更してみる
例
・ファイター設定画面をもとに、2人のファイターを生成
・1人だけ5ポイント分戦う
・その後、2人のそれぞれの現在のレベルを確認
・1人はレベル5でもう1人はレベル0、という内容
class Fighter{
private $level = 0; // レベル
public function fight($point){ // 戦う
$this->level += $point; // 戦った経験値分、レベルを加算
}
public function getLevel(){ // レベル取得
return $this->level;
}
}
// 2人のファイターのインスタンスを生成
$fighter1 = new Fighter();
$fighter2 = new Fighter();
$fighter1->fight(5);// ファイター1だけ戦ってみる
// 両方のファイターのレベル取得
$level1 = $fighter1->getLevel();
$level2 = $fighter2->getLevel();
print "ファイター1はレベル" . $level1 . "になりました\n";
print "ファイター2はレベル" . $level2 . "になりました";
結果
ファイター1はレベル5になりました
ファイター2はレベル0になりました
ファイター2はレベル0になりました