コンストラクタ

広告

コンストラクタとはクラスからオブジェクトがnewによって作成される時に自動的に呼び出されるメソッドです。オブジェクト作成時に初期化処理が必要な場合など、コンストラクタ内に記述しておけば自動的に実行してくれます。

コンストラクタを記述する場合は下記のような構文となります。

class クラス名(){
  function __construct(変数, 変数, ...){
    // コンストラクタ内で行いたい処理
  }
}

メソッド名の部分を"__construct"とすると、それがコンストラクタとなります。

コンストラクタがある場合と無い場合で考えて見ます。まずコンストラクタを使わない場合で初期化処理などがある場合は下記のような感じになります。

$tv = new Television();
$tv->init(8);

class Television{
  private $channelNo;

  function init($channel){
    $this->channelNo = $channel;
  }
}

上記では初期化処理用のメソッド「init」を定義し、オブジェクトを作成してから一度呼び出しています。ただこの形式の場合、「init」メソッドの呼び出しを忘れてしまうと、クラス内のメンバ変数の初期化がされないままになってしまうため、予期せぬエラーの原因となってしまいます。

次にコンストラクタを使った場合です。

$tv = new Television();

class Television{
  private $channelNo;

  function __construct($channel){
    $this->channelNo = $channel;
  }
}

今度はコンストラクタを使って初期化の処理が記述されていますので、このクラスからオブジェクトを作成した時点でコンストラクタは一度呼び出されるため確実に初期化が行われます。このようにコンストラクタを利用することで初期化処理の忘れがなくなりますし、オブジェクト作成時に1回だけ呼ばれるメソッドとして意図を明確にすることができます。

なおコンストラクタには引数も指定することができますが、引数の有無や数などが異なる複数のコンストラクタを定義することは出来ないようです。よってコンストラクタはクラス毎に1つだけ定義できることになります。

サンプルコード

では実際に試しておきましょう。

<html>
<head><title>PHP TEST</title></head>
<body>

<?php

$tv1 = new Television();
print('現在のチャンネルは'.$tv1->getChannel().'<br>');

class Television{
    private $channelNo;

    function __construct(){
        $this->channelNo = 8;
    }

    function getChannel(){
        return $this->channelNo;
    }
}

?>
</body>
</html>

上記のファイルをWWWサーバに設置しブラウザ経由で見ると下記のように表示されます。

コンストラクタ

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。