<?php class SuperHoge { /** スタティックメソッド */ public static function hoge($foo) { return new Hoge($foo); } } class Hoge extends SuperHoge { /** コンストラクタ */ public function Hoge($bar) { //いろいろ } } ?>
って書くと、
Fatal error: Cannot make static method SuperHoge::Hoge() non static in class Hoge in /home/tenkoma/Hoge.php on line 31
とか出ます。つまりスタティックなメソッドをそうじゃないメソッドではオーバーライドできないよって事だと思うんですが、大文字と小文字のメソッド名は区別されないっぽいですね。回避策としてはスーパークラスのメソッド名をhogeFactoryに変えてあげるか、サブクラスのコンストラクタを__constructを使って定義するとOKっぽいです。