読者です 読者をやめる 読者になる 読者になる

ちょっとPHPのシステムの改修があって、今まで日付を引数にしたメソッドが幾つか並んでたクラスがあったのですが、最初にデフォルト日付を指定してあとはその日付を使ってメソッドを使いたい時もある、っちゅうので、当然のごとく、今までのクラスを継承して日付引数を抜いたオーバーロードメソッドを定義・実装してみたら‥‥‥‥、

Fatal error: Cannot redeclare FooClass::getBarCaption() in ***\FooClass.php on line 23


PHPってオーバーロードないんだっけ orz


型宣言がないから同一個引数のオーバーライドがないのは理解できるとしても、引数の個数が違うメソッドのオーバーロードくらいしてくれても、と思ったらPHPって「宣言した引数と違う個数の引数を指定してメソッドを呼び出せる」(しかも、宣言より多い引数を渡されたときにそれを取得して使える)という、知った瞬間椅子から転げ落ちたっちゅう勢いのフリーダムさだとか。

id:yagiey:20101209

変数がvariable固定とかarrayの万能すぎて危険すぎ辺りはついて行けましたが、この「引数」という固定概念を根本から覆えしてくれる仕様は理解不能、というか理解しようとしても頭が拒否しますよ。
引数無しのメソッドを定義して、そこに任意の数と型の引数を渡して呼び出し、渡された引数を元に演算して結果を返すことが可能とか、そんなのホンキで実装してたら「そのふざけたPGをぶち殺す」レベルの話だよ。