取り敢えずやることを置いておいて…
気になりだしたら止まらない。
ので、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とかそうしないんだろう。なんかポリシーがあるのかな。