取り敢えずやることを置いておいて…

気になりだしたら止まらない。
ので、http://www.doyouphp.jp/sample/sample_class_dp_singleton.shtml これを使わせてもらいました。

$time_start = getMicroTime();
$MAX = 1000;
for ($i = 1; $i<=$MAX; $i++){
    $s1 =& Singleton::getInstance();
    $s2 =& Singleton::getInstance();
    $s3 =& Singleton::getInstance();

    $s1->setString("s1");
    $s2->setString("s2");
    $s3->setString("s3");
}
$time = getMicroTime() - $time_start;
print "Total 処理時間:$time 秒\n";

$time_start = getMicroTime();
for ($i = 1; $i<=$MAX; $i++){
    $s1 =& new Singleton();
    $s2 =& new Singleton();
    $s3 =& new Singleton();

    $s1->setString("s1");
    $s2->setString("s2");
    $s3->setString("s3");
}
$time = getMicroTime() - $time_start;
print "Total 処理時間:$time 秒\n";

結果

Total 処理時間:0.0188491344452 秒
Total 処理時間:0.0129539966583 秒

やっぱり new の方が早い…。


そこで無理矢理5000行くらいのコードをextendsしてみる。

class Singleton extends SampleClass{

こんな感じで。そして測定。

Total 処理時間:0.01731300354 秒
Total 処理時間:0.0436868667603 秒

やっと納得ができた!

あと、これってよくあるコンストラクタの持ち回しに使ったら楽だよね。

class SampleAction extends Action
{
    execute(){
        $request = Request::getInstance();

    }
}

みたいにさ。
それかコンストラクタで自動的に

class Action
{
    Action(){
        $this->request = Request::getInstance();

    }
}

ってやっといてくれると非常に有り難い。
なんでMojaviとかそうしないんだろう。なんかポリシーがあるのかな。