Singletonパターンで実装したクラスなど、__construct()
が private
や protected
なクラスってそのままでは、インスタンス化できずテストが大変ですよね。
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 なコンストラクタを外部からコールする方法