簡體   English   中英

PHP7中的縮小返回類型

[英]Narrow return type in PHP7

是否有可能在PHP7.1類型提示中縮小返回類型?

以下代碼導致致命錯誤Declaration of A::foo(): Obj must be compatible with IA::foo(): IObj ,即使通過縮小返回類型也不會破壞繼承類型的原則:Obj實現IObj,因此父類返回返回Obj實例時,將始終滿足類型約束。

interface IObj {}
class Obj implements IObj {}
interface IA {
    function foo(): IObj;
}

class A implements IA {
    function foo(): Obj {
        return new Obj();
    }
}

我做錯了什么,或者這是PHP的缺點?

就PHP而言,無法保證Obj implements IObj 因為您可以隨時將Obj的聲明移動到其他文件中,並且由於文件是在運行時而不是在某些編譯步驟中加載的,所以完全不知道Obj哪些實現將在運行時加載以及是否會implements IObj

所以,不,你不能在實現中更改返回類型,因為所有類型安全都會消失。 如果您預先編譯了預先確定Obj究竟是什么的代碼,則只能保證類型安全。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM