echo System\Core\Request::factory()->execute();
ここでは factory() が最初に呼び出され、コンストラクターが次に呼び出され、execute() が最後に呼び出されます。もちろん、期待どおりに機能します。
リクエスト クラスには、いくつかの非静的属性が含まれています。それらすべてをファクトリーメソッドで設定しました。このような:
public static function factory()
{
if(! Request::$initial)
{
$request = Request::$initial = Request::$current = new Request();
$request->foo = 'bar';
}
else
{
Request::$current = $request = new Request();
$request->foo = 'aaa';
}
return Request::$current;
}
コンストラクターは次のようになります。
public function __construct()
{
echo $this->foo; // displays empty string
echo Request::$current->foo; // trying to get property of non-object
}
何が起こっている?