PHP - OOP - 5. コンストラクタ
これまでに学習してきたようにクラスにはプロパティやメソッドを記述します。メソッドには、コンストラクタと呼ばれる特殊なメソッドが存在します。
コンストラクタの記述
コンストラクタは、クラスからインスタンスを生成するときに呼び出される特殊なメソッドです。コンストラクタメソッドと呼ぶこともあります。PHPでコンストラクタを実装するには __construct
という名前でメソッドを定義します。ここでは以前に作成した MyClass.php
ファイルにコンストラクタを追加してみましょう。
<?php
class MyClass
{
public $myProperty;
public function __construct($value)
{
$this->myProperty = $value;
}
public function myMethod($x)
{
echo $this->myProperty . " " . $x;
}
}
コンストラクタの主な用途は、インスタンス生成時のプロパティの初期化です。ここでは引数で受け取った $value
の値を使って $myProperty
プロパティを初期化しています。
定義したコンストラクタは new
演算子によってクラスからインスタンスを生成する際に呼び出されます。実際にコンストラクタを呼び出す様子を見てみましょう。my_class_runner.php
ファイルを次のように修正します。
<?php
require_once("MyClass.php");
$myClass = new MyClass("Hello"); # コンストラクタ呼び出し
$myClass->myMethod("Andy"); #=> Hello Andy
MyClass
クラスに定義したコンストラクタは、引数を1つ受け取る( $value
)ようにしているので、上記のように引数に "Hello"
を指定してインスタンスを生成できます。この結果、 MyClass
インスタンスの $myProperty
プロパティは "Hello"
で初期化されるため、 $myClass->myMethod("Andy")
を実行すると画面に Hello Andy
と出力されます。
PHPプログラムの開発(コンストラクタの実装)
それでは簡単な計算機クラス( SimpleCalc
)にコンストラクタを追加してみましょう。
<?php
class SimpleCalc
{
private $number;
public function __construct($number)
{
$this->number = $number;
}
public function setNumber($number)
{
$this->number = $number;
}
public function getNumber()
{
return $this->number;
}
public function add($x)
{
$this->number = $this->number + $x;
}
public function show()
{
echo $this->number . PHP_EOL;
}
}
ここでは計算機クラスに引数$numberを受け取るコンストラクタを実装しています。
public function __construct($number)
{
$this->number = $number;
}
コンストラクタでは引数で受け取った値を $number
プロパティに代入しています。このようにコンストラクタはプロパティを初期化する用途に利用します。
続いて実行プログラム( calc_runner.php
)を修正します。
<?php
require_once("SimpleCalc.php");
$calc = new SimpleCalc(10);
// $calc->setNumber(10);
$calc->add(20);
$calc->add(30);
$calc->show();
ここでは new
演算子によって SimpleCalc
クラスのコンストラクタを呼び出しています。この時、コンストラクタの引数に 10
を指定しているので、 SimpleCalc
インスタンスの $number
プロパティに 10
が代入されます。
それではコマンドラインからプログラムを実行してみましょう。
$ php calc_runner.php
60
実行結果からコンストラクタによって SimpleCalc
インスタンスの $number
プロパティを適切に初期化できているのがわかります。このようにコンストラクタは、インスタンス生成時にプロパティを初期化する用途に使う特殊なメソッドです。
参考:マジックメソッド
PHPには __construct
のように、 __
で始まる特別なメソッドがいくつか用意されています。このような特殊なメソッドはマジックメソッドと呼びます。詳しくは PHPマニュアル - マジックメソッド を参照してください。
まとめ
- コンストラクタとは、クラスからインスタンスを生成するときに呼び出される処理のこと
- コンストラクタはインスタンス生成時のプロパティの初期化に利用する
new
演算子によってクラスに定義した__construct
メソッド(コンストラクタ)が呼び出される