こもろぐ @tenkoma

What We Find Changes Who We Become -- Peter Morville著『アンビエント・ファインダビリティ 』

広告:本ブログで紹介している書籍等商品の紹介でAmazonアソシエイトを利用していることがあります。

メソッド名の大小って区別しないんですねー

<?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っぽいです。