2012-10-13 54 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

相关问题