General

クラスに空の内容のメソッドを持たせるべきか持たせざるべきか

2007年12月30日

現在の仕様では、新しいクラスが呼び出されたときに、init()メソッドが存在すればそれを呼び出す仕組みになっている。クラスによっては、init()メソッドは必要ではないのであるが、その場合は、init()メソッド呼び出しの際の命令でWarningが発生する(@を用いているので、表示されない)。

このようなケースに、空の内容のinit()メソッドを記述しておいたほうが早いのか、何も記述しないほうが早いのか、調べてみた。

<?php

    $time_index=microtime();
    @call_user_func(array('test','init'));
    $time_index=(int)((microtime()-$time_index)*1000000);
    echo "test: $time_index usec<br />\n";

    $time_index=microtime();
    @call_user_func(array('test1','init'));
    $time_index=(int)((microtime()-$time_index)*1000000);
    echo "test1: $time_index usec<br />\n";
    $time_index=microtime();
    @call_user_func(array('test2','init'));
    $time_index=(int)((microtime()-$time_index)*1000000);
    echo "test2: $time_index usec<br />\n";
    $time_index=microtime();
    @call_user_func(array('test2','init'));
    $time_index=(int)((microtime()-$time_index)*1000000);
    echo "test2: $time_index usec<br />\n";
    $time_index=microtime();
    @call_user_func(array('test1','init'));
    $time_index=(int)((microtime()-$time_index)*1000000);
    echo "test1: $time_index usec<br />\n";
    $time_index=microtime();
    @call_user_func(array('test1','init'));
    $time_index=(int)((microtime()-$time_index)*1000000);
    echo "test1: $time_index usec<br />\n";
    $time_index=microtime();
    @call_user_func(array('test2','init'));
    $time_index=(int)((microtime()-$time_index)*1000000);
    echo "test2: $time_index usec<br />\n";
    $time_index=microtime();
    @call_user_func(array('test2','init'));
    $time_index=(int)((microtime()-$time_index)*1000000);
    echo "test2: $time_index usec<br />\n";
    $time_index=microtime();
    @call_user_func(array('test1','init'));
    $time_index=(int)((microtime()-$time_index)*1000000);
    echo "test1: $time_index usec<br />\n";

class test{

}

class test1{

}
class test2{
    static public function init(){}
}

実行結果
test: 48 usec
test1: 18 usec
test2: 16 usec
test2: 12 usec
test1: 18 usec
test1: 18 usec
test2: 12 usec
test2: 13 usec
test1: 18 usec

記述しておいたほうが、5μ秒ほど早いようである(笑)。

コメント

コメントはありません

コメント送信