jba*_*ros 9 php oop coding-style
看来(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不允许方法签名 超载覆盖.所以,我不得不问.我的观察是一个错误/缺陷还是实际上正确 预期的行为?
此外,如果默认参数参数可以,为什么非默认参数参数不正常?
如果向重写方法添加非默认参数,则子类不再满足超类定义的约定.你无法正确调用test2-> stuff(),因为这个方法现在需要一个参数 - 但超类说你应该能够在没有参数的情况下调用它.因此E_STRICT警告.
如果你添加了一个默认参数,你仍然可以调用test3-> stuff()(来自你的例子) - 正如超类所期望的那样 - 因此合同不会被破坏.实际上,通过添加可选参数,您只需对其进行扩展.
And*_*aal -2
这不是一个错误,并且是可接受的 PHP 编程实践。
请注意,多次覆盖可能会导致programmer headaches这种情况,因此应尽可能避免。
或者,我通常要么有一个扩展类来覆盖每个类,要么只是在实际类本身中重载一个类方法。