PHP - OOP - 5. コンストラクタ

これまでに学習してきたようにクラスにはプロパティやメソッドを記述します。メソッドには、コンストラクタと呼ばれる特殊なメソッドが存在します。

コンストラクタの記述

コンストラクタは、クラスからインスタンスを生成するときに呼び出される特殊なメソッドです。コンストラクタメソッドと呼ぶこともあります。PHPでコンストラクタを実装するには __construct という名前でメソッドを定義します。

class MyClass
{
    public $myProperty;

    public function __construct($value)
    {
        $this->myProperty = $value;
    }

    public function myMethod($x)
    {
        echo $this->myProperty . " " . $x;
    }
}

コンストラクタの主な用途は、インスタンス生成時のプロパティの初期化です。ここでは引数で受け取った $value の値を使って $myProperty プロパティを初期化しています。

定義したコンストラクタは new 演算子によってクラスからインスタンスを生成する際に呼び出されます。実際にコンストラクタを呼び出す様子を見てみましょう。

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 メソッド(コンストラクタ)が呼び出される