オブジェクトを作成したときに、はじめに色々な処理を
行いことがあります。オブジェクト生成時に初期値を設定したり、
値チェックをしたりです。
オブジェクトを生成されるときに必ず行われるメソッドと
いうものを書いておくことができます。このメソッドのことを
コンストラクタ(constructor)と呼んでいます。
コンストラクはクラスの内部に記述します。コンストラクタは
「__construct」という名前を使います。
名前の先頭が2つのアンダースコアではじまります。
function __construct(引数)
{
文;
・・・・
}
オブジェクトを生成されるときコンストラクタが呼び出される。
メンバ変数は、個々のオブジェクトごとに値を格納することができ、
1人の人を表すオブジェクトごとに「佐藤さん」や「30」才という
値をもつことができます、名まえや年齢を調べるメソッドも
オブジェクトを作成した後、呼び出すことができました。
これまで出てきたメンバ・メソッドは、
オブジェクトに関連づけられていた
ということです。
これに対して、クラス全体で値を格納したり、処理したい場合もあると
思います。たとえば、Customerクラスでいくつのオブジェクトがあるか
知りたい場合には、クラス全体で値を持つことが必要です。
このことを
クラス全体に関連づけられる
ということがあります。クラス全体に関連付けるためには、
メンバ変数、メソッドの先頭にstaticをつけます。
//オブジェクトごとに値が存在
private $name = ""
private $age = 18;
//クラス全体に1つの値
public static $count =0;
・・・・・
これまでのメンバ変数ではオブジェクトごとに値が存在しますが、
staticをつけたメンバ変数は、クラスに1つだけ存在することになります。
staticをつけたメンバ変数・メソッドは「クラス名::」をつけて使います。
以下のようにかきます。
Customer::$count
クラス全体で管理されるメンバ変数・メソッドには
staticをつける。
サンプルコードの実行結果はこちら
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
<!doctype html> <html> <head> <meta charset="utf-8"> <title>コンストラクタを使ってみる</title> <link rel="stylesheet" href="../style.css"> </head> <body> <?php //オブジェクト作成時にコンストラクタも呼び出す $cu[0] = new Customer("加藤",22); $cu[1] = new Customer("山田",28); for( $i = 0 ; $i < count($cu) ; $i++ ){ echo "名前:" . $cu[$i]->getName(); echo "<br>"; echo "年齢:" . $cu[$i]->getAge(); echo "<br>"; } //Customerクラスの数を出力 echo "人数:" . Customer::$cnt; class Customer { private $name =""; private $age = 18; public static $cnt = 0; //オブジェクトが作成されるたびに呼ばれる public function __construct($n,$a){ Customer::$cnt++; $this->name = $n; if( $a >= 18 && $a <= 65 ){ $this->age = $a; }else{ $this->age = -1; } } function getName(){ return $this->name;} function getAge(){ return $this->age;} } ?> </body> </html> |
クラス名を確認
メソッドの中で、実行中のクラス名やメソッド名を出力できます。
クラス名を主力したい場合 「__CLASS__」、
メソッド名を出力したい場合「__METHOD__」という定数を出力します。
これらはPHPで定義されている定数です。プログラムの動作確認を
するときに便利です。