クラスからインスタンスを生成する際(new を行う際)に最初に実行される関数、それがコンストラクタです。コンストラクタは自動的に実行されます。
コンストラクタの利用目的としては主にインスタンスを生成するときの初期化に用いられます。
コンストラクタの書き方
PHPでは、コンストラクタの書き方が他の言語とはやや異なります。
他の言語ではクラスと同じ名前のメソッドを定義することが多いのですが、PHPの場合、 __construct という名前のメソッドを作ることでコンストラクタを表します。
1 2 3 4 5 6 7 8 9 10 11 |
class Man { protected $name; function __construct() { $this->name = "鈴木"; } function show() { echo $this->name; } } |
このクラスの場合、コンストラクタ __construct の中で $name を「鈴木」に初期化しています。
コンストラクタの実行
コンストラクタはnew をするだけで自動的に実行されます。
例えば上のクラスで以下のようにインスタンスを生成、showメソッドを呼び出してみます。
1 2 |
$seito = new Man(); $seito->show(); |
new を行った時点でコンストラクタが実行され、$nameに「鈴木」が入ります。
その結果、show を行うと、「鈴木」が表示されます。
コンストラクタの引数
コンストラクタには引数を付けることが可能です。インスタンス生成時(new を行ったとき)にこの引数に値を設定します。
例えば以下の例ではコンストラクタに $n という引数を設定しました。
その $n を $name に入れています。
1 2 3 4 5 6 7 8 9 10 11 12 |
class Man { protected $name; function __construct($n){ $this->name = $n; } function show() { echo $this->name; } } |
このクラスのインスタンスを生成する場合、以下のように行います。
1 2 |
$seito = new Man("渡辺"); $seito->show(); |
この例では new を行う際の() に "渡辺" と指定しています。
この結果、"渡辺" がインスタンス内の $name に入り、 showメソッドを実行した際に「渡辺」と表示されます。
このようにコンストラクタに引数を設定した場合、new を行う際には引数を必ず指定しなくてはいけなくなります。その結果、初期化を忘れるといったことを避けることができます。
クラス名と同じ名前のコンストラクタ
クラス名と同じ名前のメソッドを定義することで、コンストラクタとすることも可能です。例えば、SampleClassというクラスに、SampleClassというメソッドがあれば、コンストラクタとみなされます。
PHP 5.3.3 以降はコンストラクタとみなされない
ですが、これは古い記述の仕方なので避けたほうが良いでしょう。また、PHP 5.3.3 以降で名前空間を使う場合は、同じ名前のメソッドはコンストラクタとみなされなくなりました。
まとめ
コンストラクタはクラスを利用する際には非常に便利な機能です。
ほとんどのクラスで利用されているといってもいいでしょう。
クラスを作成する際にはどのようなコンストラクタがあった方がよいかをよく考えてみましょう。