为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

森林海 2019-07-13 15:04:09
方法声明应与PHP中的父方法兼容Strict Standards: Declaration of childClass::customMethod() should be compatible with that of parentClass::customMethod()PHP中出现此错误的可能原因是什么?我在哪里可以找到关于它意味着什么的信息?兼容?
查看完整描述

3 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

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


查看完整回答
反对 回复 2019-07-13
?
墨色风雨

TA贡献1853条经验 获得超6个赞

此消息意味着某些可能的方法调用可能在运行时失败。假设你有

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) {;}}

这似乎比它所需要的限制更多,我认为这是由于内部因素造成的。

可见性差异会导致不同的错误,但基本原因是相同的。没有任何方法比它的父方法更不可见。


查看完整回答
反对 回复 2019-07-13
?
繁星淼淼

TA贡献1775条经验 获得超11个赞

如果要在不关闭任何错误的情况下保持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();
        // ...

    }}


查看完整回答
反对 回复 2019-07-13
  • 3 回答
  • 0 关注
  • 453 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信