オブジェクト指向言語のPHPが備えるコンストラクタとデストラクタ

2015年2月10日(火)
原田 裕介(はらだゆうすけ)

フレームワークでの使われ方

コンストラクタとデストラクタは、ライブラリやフレームワークのクラスなどでもよく使われます。実際にコンストラクタやデストラクタがどのように使われているか、有名なフレームワークを覗いてみましょう。

まずはcakephp2のConsoleOutput.phpです。

ConsoleOutput.php(部分)

省略
:
public function __construct($stream = 'php://stdout') {
  $this->_output = fopen($stream, 'w');

  if (DS === '\\' && !(bool)env('ANSICON')) {
    $this->_outputAs = self::PLAIN;
  }
}
:
省略
:
public function __destruct() {
  fclose($this->_output);
}
:
省略

コンストラクタで出力先のファイルなり、コンソールを開いておいて、デストラクタで閉じています。

次はCakeSocket.phpです。

CakeSocket.php(部分)

省略
:
public function __construct($config = array()) {
  $this->config = array_merge($this->_baseConfig, $config);
  if (!is_numeric($this->config['protocol'])) {
    $this->config['protocol'] = getprotobyname($this->config['protocol']);
  }
}
:
省略
:
public function __destruct() {
  $this->disconnect();
}
:
省略

こちらは、ソケット通信を行うクラスですが、コンストラクタで設定情報を保持しておき、デストラクタで通信を切断しています。

最後はSymfony2のDebug/ErrorHandler.phpです。

ErrorHandler.php(部分)

省略
:
class ErrorHandlerCanary
{
    private static $displayErrors = null;

    public function __construct()
    {
        if (null === self::$displayErrors) {
            self::$displayErrors = ini_set('display_errors', 1);
        }
    }

    public function __destruct()
    {
        if (null !== self::$displayErrors) {
            ini_set('display_errors', self::$displayErrors);
            self::$displayErrors = null;
        }
    }
}
:
省略

デバッグ用にエラーを制御するクラスですが、コンストラクタでオブジェクト生成時にエラー出力設定であるdisplay_errorsをオンにし、元の設定値を保存しておきます。そしてデストラクタでオブジェクトを破棄する時に、display_errorsを元の値に戻しています。こうすることで、エラーを出力してデバッグできるようにしています。

このように、コンストラクタとデストラクタには色々な使い方があります。特にライブラリを書いたりする際には重宝します。メソッドで最初と最後に行われる処理の共通化にも利用できるので、きちんと使えると綺麗なコードになるでしょう。

PHP技術者認定試験では、コンストラクタとデストラクタに関する範囲はそれほど広くありませんが、上級エンジニアになるためにきちんと覚えておきましょう。

次回は「ファイルのアップロード処理」についてお話ししていきます。
ではまた。

【参考文献】

著者
原田 裕介(はらだゆうすけ)
株式会社ユーザーローカル
東京都在住。携帯のホームページ作成サービスでHTMLのコーディングを始めて、PHPerとなる。
株式会社ハッシュシステム代表取締役やtetolの立ち上げ、株式会社イードでニュースメディアの開発やエンジニア採用を経て、現在はアクセス解析ツールの開発を行いながら、個人でもWEBサービスの開発を行っている。PHP技術者認定上級試験の認定者でもあり、受賞歴はmixi scrap challenge優勝など。

 

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています