方法声明应与PHP中的父方法兼容

方法声明应与PHP中的父方法兼容

Strict Standards: Declaration of childClass::customMethod() should be compatible with that of parentClass::customMethod()

PHP中出现此错误的可能原因是什么?我在哪里可以找到关于它意味着什么的信息?兼容?


森林海
浏览 459回答 3
3回答

jeck猫

childClass::customMethod()具有不同的参数,或不同的访问级别(公共/私有/保护)parentClass::customMethod().

墨色风雨

此消息意味着某些可能的方法调用可能在运行时失败。假设你有class A { public function foo($a = 1) {;}}class B extends A { public function foo($a) {;}}function bar(A $a) {$a->foo();}编译器只根据不需要参数的A:foo()的要求检查调用$a->foo()。但是,$a可能是B类的对象,它需要一个参数,因此调用将在运行时失败。但是,这不会失败,也不会触发错误。class A { public function foo($a) {;}}class B extends A { public function foo($a = 1) {;}}function bar(A $a) {$a->foo();}因此,没有任何方法比它的父方法具有更多需要的参数。当类型提示不匹配时,也会生成相同的消息,但在这种情况下,PHP的限制性更强。这就产生了一个错误:class A { public function foo(StdClass $a) {;}}class B extends A { public function foo($a) {;}}这一点也是如此:class A { public function foo($a) {;}}class B extends A { public function foo(StdClass $a) {;}}这似乎比它所需要的限制更多,我认为这是由于内部因素造成的。可见性差异会导致不同的错误,但基本原因是相同的。没有任何方法比它的父方法更不可见。

繁星淼淼

如果要在不关闭任何错误的情况下保持OOP窗体,还可以:class A{     public function foo() {         ;     }}class B extends A{     /*instead of :      public function foo($a, $b, $c) {*/     public function foo() {         list($a, $b, $c) = func_get_args();         // ...     }}
打开App,查看更多内容
随时随地看视频慕课网APP