Edited at

コンストラクタがprivateなクラスを1行でテスト可能にする

More than 5 years have passed since last update.

Singletonパターンで実装したクラスなど、__construct()privateprotected なクラスってそのままでは、インスタンス化できずテストが大変ですよね。

PHP5.4からは ReflectionClass でコンストラクタを使わないでインスタンスを作ることができるようになりました。

<?php

class Singleton
{
private function __construct() {}
}

// $singleton = new Singleton(); // Fatal error: Call to private Singleton::__construct() from invalid context

$singleton = (new ReflectionClass('Singleton'))->newInstanceWithoutConstructor();

var_dump($singleton);

便利ですね!


追記 2013/12/19

@mpyw さんによるまとめ: private, protected なコンストラクタを外部からコールする方法