2012-10-13 95 views
2

我有一個愚蠢的問題。我想在2 - 3年的C#之後學習PHP。如何使用final類作爲界面中的類型(php)

,喜歡在C#

public enum SimpleEnum{ 
    One, 
    Two, 
    Three 
} 

public interface ISimple 
{ 
    int Id; 
    SimpleEnum SimpleType; 
} 

我在PHP做了什麼:

final class SimpleEnum { 
    const ONE = 1; 
    const TWO = 2; 
    const THREE = 3; 
} 

interface ISimple { 
    public $value1; 

    SimpleEnum $myEnum; 
} 

但從SimpleEnum發生在ISimple錯誤。

也許是不可能的,但我要問你如何使用SimpleEnum在接口類型?

謝謝

+5

PHP是動態類型的;你不能給'$ myEnum'類型。另外,PHP接口無論如何都不能有成員變量。 – NullUserException

回答

2

不可能的,但如果你需要$ myEnum具體是SimpleEnum,那麼就需要它的合同(接口),所以任何參展班會紛紛跟風。你可以通過類型提示來做到這一點

interface ISimple { 
    public function setMyEnum(SimpleEnum $myEnum); 
} 
+0

好點:) –

1

由於Type Juggling下記載:

PHP不需要(或支持)在變量聲明明確的類型定義;變量的類型由使用變量的上下文確定。

+0

如何在界面中使用最終的類?只是簡單地'公共$ myVar'? –

2

Fatal error: Interfaces may not include member variables ...所以,你不能有Interface的屬性,只有方法的聲明,相反,你可以使用abstract class,並從中擴展它。

而且,在PHP中,沒有嚴格的控制類型。所以,如果你想申報財產,只要使用public $enum = null__construct()初始化它$this->enum = ...;

還有一件事。如果你想確保SimpleEnum正是存儲在$enum物業,該物業setSimpleEnum(SimpleEnum $enum) { ... }您存儲傳遞價值類屬性聲明的制定者。使用它無處不在,要改變$enum,因此,如果您通過沒有從SimpleEnum擴展類的東西 - 你將有一個Fatal。僞嚴格控制。

+0

好點也先生。你可以在處理之前使用if($ myEnum instanceof SimpleEnum)檢查PHP中的類型 – Coldstar

+1

我選擇'is_a()'...更短。 – devdRew

相關問題