亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

方法聲明應與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 關注
  • 532 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號