我知道我迟到了,但答案并没有真正说明实际问题。
问题是PHP不支持函数/方法重载。在非类型化语言中支持函数重载是很困难的。
提示会有所帮助。但在PHP中,它非常有限。不知道为什么。例如,您不能暗示变量是整数或布尔值,但数组很好。去图吧!
其他面向对象的语言使用函数重载来实现这一点。也就是说,函数的签名明显不同。
因此,例如,如果以下情况可能,我们就不会有问题
class Foo
{
public function bar(Array $bar){
echo "Foo::bar";
}
}
class Baz extends Foo
{
public function bar(int $bar) {
echo "Baz::bar";
}
}
$foo = new Baz();
$bar = new Baz();
$ar = array();
$i = 100;
$foo->bar($ar);
$bar->bar((int)$i);
would output
Foo::bar
Baz::bar
当然,当涉及到构造函数时,php开发人员意识到他们必须实现它,不管你喜欢与否!因此,他们只是在第一种情况下抑制错误或不提高错误。
这很愚蠢。
一位熟人曾经说过,PHP实现对象只是作为实现命名空间的一种方式。现在我并不是那么挑剔,但做出的一些决定确实倾向于支持这一理论。
在开发代码时,我总是打开最大警告,在不明白它的含义和含义的情况下,我从来不会让警告过去。就个人而言,我不在乎这个警告。我知道我想做什么,而PHP做得不对。我来到这里寻找一种选择性地压制它的方法。我还没有找到办法。
因此,我将捕获此警告并自己压制它。可惜我需要这样做。但我对严格要求。