【PHP】インスタンス化した際の初期値設定方法(コンストラクター)
前回、メンバ変数を宣言することでオブジェクトの設計を行いました。
|
1 2 3 4 5 6 7 8 9 10 |
<?php class Player { //クラスを宣言 public $name; //「name」変数を宣言 public $hp; //「hp」変数を宣言 public $mp; //「mp」変数を宣言 } $tanaka = new Player(); //「Player」クラスから「$tanaka」オブジェクトを作成 print_r($tanaka); //確認用 ?> |
しかしこのままでは各項目には値が入っていませんね。膨大な情報を効率よく整理していくには値の入力についても効率よく設定できなければなりません。
今回はインスタンス化した際に、初期値を設定する方法を学びます。
インスタンス化した際に初期値を設定する「コンストラクター」について
まずは「コンストラクタ―」という言葉を知っておきましょう。「コンストラクター」とはオブジェクトをインスタンス化する際に、自動的に実行されるプログラムです。主にプロパティに値を設定する、初期値を設定するプログラムとして使用されています。
一般的な書き方は以下の通りです。
|
1 2 3 4 |
public function __construct(インスタンス作成時に渡される引数){ $this->プロパティ = 設定する値; ・・・・・・・ } |
基本的には通常の関数宣言と同じく「function」で宣言しますが、「function」の後に一文字スペースを入れて「__construct( ){ }」と記述します。引数には設定したい変数、「{ }」内には各プロパティにどの変数、または定数を設定するかを記述します。
実際に書いてみたほうがイメージしやすいと思います。実例を見てみましょう。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php class Player { //クラスを宣言 public $name; //「name」変数を宣言 public $hp; //「hp」変数を宣言 public $mp; //「mp」変数を宣言 public function __construct($name , $hp , $mp){ //コンストラクタ(インスタンス化した際の初期値入力設定) $this->name = $name; //作成するオブジェクトの「name」項目に変数「$a」を代入する $this->hp = $hp; //作成するオブジェクトの「hp」項目に変数「$b」を代入する $this->mp = $mp; //作成するオブジェクトの「name」項目に変数「$c」を代入する } } $tanaka = new Player("tanaka" , 50 , 20); //「Player」クラスから「$tanaka」オブジェクトを作成し、各項目に初期値を設定する print_r($tanaka); //確認用 ?> |
プログラム初心者の方には「$this」と「->」が最初躓く部分かなと思います。
「$this」は自身のインスタンスを表しています。「$tanaka」とか「$suzuki」とか、同じクラスを持ったインスタンスが作成されるとおもいますが、「$this」とは各々の持っている情報を取り出す際に使用する変数です。
「->」はアロー演算子と呼ばれています。細かな説明はここではしませんが、プロパティやメソッドを呼び出す為に使用します。
「$this->name = $name」は「作成するオブジェクトの”name”プロパティに引数の”$name”を代入しなさい」という感じですね。
上記のプログラムを実行してみると…
空だったプロパティに値が設定されましたね。このようにコンストラクターを設定し、クラス作成時の引数に値を設定することで初期値を設定することができます。
試しにもう一つ「$suzuki」というインスタンスを作成してみましょう。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php class Player { //クラスを宣言 public $name; //「name」変数を宣言 public $hp; //「hp」変数を宣言 public $mp; //「mp」変数を宣言 public function __construct($name , $hp , $mp){ //コンストラクタ(インスタンス化した際の初期値入力設定) $this->name = $name; //作成するオブジェクトの「name」項目に変数「$a」を代入する $this->hp = $hp; //作成するオブジェクトの「hp」項目に変数「$b」を代入する $this->mp = $mp; //作成するオブジェクトの「name」項目に変数「$c」を代入する } } $tanaka = new Player("tanaka" , 50 , 20); //「Player」クラスから「$tanaka」オブジェクトを作成し、各項目に初期値を設定する $suzuki = new Player("suzuki" , 75 , 5); //「Player」クラスから「$suzuki」オブジェクトを作成し、各項目に初期値を設定する print_r($tanaka); //確認用 print_r($suzuki); //確認用 ?> |
「$suzuki」のインスタンスもできました。「$tanakata」と「$suzuki」、同じクラスから違う情報を持ったインスタンスはこのようにコンストラクタ―から設定することができます。
ちなみに、上記で説明した通り、コンストラクターとはあくまで「インスタンス化した際に実行されるプログラム」であり、初期値を設定する以外の用途にも使用することができます。例えばコードを下記のように変更してみます。
|
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 |
<?php class Player { //クラスを宣言 public $name; //「name」変数を宣言 public $hp; //「hp」変数を宣言 public $mp; //「mp」変数を宣言 public function __construct($name , $hp , $mp){ //コンストラクタ(インスタンス化した際の初期値入力設定) $this->name = $name; //作成するオブジェクトの「name」項目に変数「$a」を代入する $this->hp = $hp; //作成するオブジェクトの「hp」項目に変数「$b」を代入する $this->mp = $mp; //作成するオブジェクトの「name」項目に変数「$c」を代入する echo $this->name."さん、この世界にようこそ!"; } public function denote_hp(){ //プレイヤーのHPを表示するメソッド echo $this->name."のHPは".$this->hp."です。"; } public function denote_mp(){ //プレイヤーのMPを表示するメソッド echo $this->name."のMPは".$this->mp."です。"; } } $tanaka = new Player("tanaka" , 50 , 20); //「Player」クラスから「$tanaka」オブジェクトを作成し、各項目に初期値を設定する $suzuki = new Player("suzuki" , 75 , 5); //「Player」クラスから「$suzuki」オブジェクトを作成し、各項目に初期値を設定する ?> |
「echo $this->name.”さん、この世界にようこそ!”;」を追加してみました。このプログラムが、インスタンス化すると同時に実行されるはずです。
このようにインスタンス化すると同時に「この世界にようこそ!」という文章が表示されました。作りたいプログラムによって処理を変えていきたいですね。
まとめ
ここまででクラスから実際にオブジェクトを作成するインスタンス化と、インスタンス化する際に初期値を設定するコンストラクターについて学びました。しかしオブジェクトとは「変数とメソッド(関数)がまとまったもの」でしたよね?まだこのクラス内にはクラスで共有するメソッドがないので、次回はメソッドの追加方法について学びたいと思います。
- インスタンス化する際に、各プロパティに初期値を設定するにはコンストラクターを使用する。
- コンストラクターはメソッドの一種で、「public function __construct( ){ }」と記述する。
- コンストラクターはインスタンス化する際に自動的に実行されるプログラムである