簡體   English   中英

php抽象類擴展方法參數類型或類型提示類型

[英]php abstract class extending method parameter type or type hint type

考慮這種情況,我有一個抽象類,孩子們用它來繪制藍圖並用它做不同的動作。 現在我有多個類來擴展它並使用藍圖執行稍微不同的操作,因此我有所述藍圖的擴展版本,我需要每個子類來獲取。

因此,我想將抽象類中的屬性或相應的函數輸入屬性定義/類型提示為 any,然后在每個子類中指定屬性類型。

但我不能這樣做,因為 PHP 7 給了我一個錯誤

Declaration B::setBlueprint() must be compatible with A::setBlueprint()

藍圖類

class Blueprint {
    public $id;
}

class ChildBlueprint extends ParentBlueprint {
    public $someOtherPropINeedOnlyInThisClass;
}

以及使用這些藍圖的抽象類

abstract class A {
    abstract public function setBlueprint( ParentBlueprint $_ );
}

class B extends A {
    public function setBlueprint( ChildBlueprint $_ ) {}
}

我的意思是我需要一個從所有 A、B、C、...、X、Y 類中派生的藍圖,因此將它排除在抽象類之外是沒有意義的。

這個問題有什么好的 OOP 解決方案?

你可以通過實現依賴倒置來克服這個問題:

interface Blueprint {
}

class ParentBluePrint implements Blueprint
{
    public $id;
}

class ChildBluePrint extends ParentBlueprint
{
    public $id;
}

abstract class A
{
    abstract public function setBlueprint( Blueprint $_ );
}

class B extends A
{
    public function setBlueprint( Blueprint $_ ) {}
}

在此處查看有關相關 SOLID 原則的更多信息。

暫無
暫無

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

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