gpt4 book ai didi

php - 将参数添加到覆盖方法 E_STRICT 观察

转载 作者:可可西里 更新时间:2023-11-01 12:20:22 25 4
gpt4 key购买 nike

看起来(PHP 5.3)如果你重写一个类方法,可以你可以添加额外的参数,只要它们有默认值。

例如,考虑类:

class test1 {
public function stuff() {
echo "Hi";
}
}

以下类扩展“test1”并将产生 E_STRICT 警告。

class test2 extends test1 {
public function stuff($name) {
echo "Hi $name";
}
}

但是,以下不会产生 E_STRICT 警告。

class test3 extends test1 {
public function stuff($name = "") {
echo "Hi $name";
}
}

虽然类“test3”不会产生 E_STRICT 警告,但我的印象是 PHP 不允许方法签名被重载 覆盖。所以,我不得不问。我的观察结果是错误/缺陷还是实际上是正确的预期行为?

此外,如果默认参数没问题,为什么非默认参数就不行了?

最佳答案

如果将非默认参数添加到重写方法,子类将不再满足父类(super class)定义的契约。你不能正确地调用 test2->stuff(),因为这个方法现在需要一个参数——但是父类(super class)说你应该可以在没有参数的情况下调用它。因此 E_STRICT 警告。

如果你添加了一个默认参数,你仍然可以调用 test3->stuff() (从你的例子中)——正如父类(super class)所期望的——所以契约没有被破坏。事实上,通过添加可选参数,您只是对其进行了扩展。

关于php - 将参数添加到覆盖方法 E_STRICT 观察,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6699949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com