次のようなコードを記述すると、PHP の警告「厳格な標準: x の宣言は y と互換性がある必要があります」が表示されます。
class A {
function foo($x) {
..
}
}
class B extends A {
function foo() {
..
}
}
これは理にかなっています。なぜなら、$a
であると考えられる" " のようなオブジェクト参照A
が、実行時に であることが判明する可能性があるB
ためです。$a->foo(3)
B::foo()
私の質問は、動的にディスパッチされない静的メソッドに同じ警告が適用されるのはなぜですか?
class X {
static function bar($x) {
..
}
}
class Y extends X {
static function bar() {
..
}
}
この例では、関数Y::bar()
は をオーバーライドしX::bar()
ないため、警告をトリガーする理由はありませんが、PHP は引き続き警告をトリガーします。なんで?