PHP<5.3での遅延静的束縛エミュレート

PHP5.3からは遅延静的束縛(Late Static Bindings)によって子孫クラスの静的メソッドを呼び出すことができるようになった。
同じことを5.3より前のバージョン*1で行う方法

<?php
class Foo {
public static function hoge(){
        echo 'Foo', PHP_EOL;
}

public function execute()
{
        echo '-- use self --', PHP_EOL;
        self::hoge();

/* for PHP >= 5.3 (Late Static Bindings)    
        echo '-- use static --', PHP_EOL;
        static::hoge();
*/
        echo '-- use get_class --', PHP_EOL;
        call_user_func(array(get_class($this), 'hoge'));

        echo '-- use $this direct --', PHP_EOL;
        call_user_func(array($this, 'hoge'));
}
}

class Bar extends Foo {
public static function hoge()
{
        echo 'Bar', PHP_EOL;
}
}

$foo = new Foo();
$bar = new Bar();

echo '[Foo]', PHP_EOL;
$foo->execute();

echo '[Bar]', PHP_EOL;
$bar->execute();

?>

*1:PHP5.2とか