我的 Visual Studio 代碼顯示“未定義的方法”。我想知道是否可以通過一些 VSC 設定“修復”它,或者是否有 PHP 解決方案。我有這個
class A
{
public function someMethodA()
{
// ...
}
}
class B extends A implements Bint
{
public function someMethodB()
{
// ...
}
}
interface BInt
{
public function someMethodB();
}
class C
{
public function someMethodC(Bint $b)
{
// VSC shows indefined method
return $b->someMethodA();
}
}
我的界面沒有someMethodA,是否可以“繼承”它Class A以擺脫“錯誤”?這個類來自一個包,它沒有介面,我需要擴展它
getStatusCode()存在,它是公開的,一切正常,但 Visual Studio Code 無法理解它

uj5u.com熱心網友回復:
專注于您的代碼示例,而不是您的螢屏截圖,您的 IDE 是正確的,您應該聽聽它告訴您的內容。
方法的約定someMethodC是它可以接受介面的任何實作Bint。這保證您可以呼叫someMethodB,但不保證其他任何事情。
如果該方法傳遞了一個類 A 的實體,那么 PHP 將允許您呼叫someMethodA它,但它可能會傳遞一些其他物件,例如:
class OnlyB implements Bint {
public function someMethodB() {
// ..
}
}
someMethodC 的合約(簽名)說你可以傳遞這個物件,但是當你呼叫 時someMethodA,你會得到一個錯誤。
如果您希望該方法始終接收 A 類的實體,請在簽名中說明:
public function someMethodC(A $b) {
return $b->someMethodA();
}
如果您希望它接受的任何實作Bint,那么您應該只呼叫該介面保證存在的方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/475105.html
上一篇:像這樣評論標簽
