如何在接口(php)中使用final类作为类型

时间:2012-10-13 07:04:19

标签: c# php

我有一个愚蠢的问题。我想在2年的C#之后学习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作为类型?

谢谢

3 个答案:

答案 0 :(得分:2)

Fatal error: Interfaces may not include member variables ...所以,你不能在Interface中拥有属性,只能使用方法声明,而是可以使用abstract class并从中扩展它。

此外,在PHP中,没有严格的类型控制。因此,如果您要声明属性,只需使用public $enum = null并在__construct()初始化$this->enum = ...;

还有一件事。如果要确保SimpleEnum$enum属性中存储的内容完全相同,请声明此属性setSimpleEnum(SimpleEnum $enum) { ... }的setter,其中将传递的值存储到类属性。在任何地方使用它,您想要更改$enum,这样如果您传递的任何类都没有从SimpleEnum扩展 - 那么您将拥有Fatal。伪严格类型控制。

答案 1 :(得分:2)

不可能,但如果您需要$ myEnum专门为SimpleEnum,那么只需在合约(界面)中要求它,所以任何参展类都必须效仿。你可以通过类型提示

来做到这一点
interface ISimple {
    public function setMyEnum(SimpleEnum $myEnum);
}

答案 2 :(得分:1)

正如Type Juggling所述:

  

PHP不要求(或支持)变量声明中的显式类型定义;变量的类型由使用变量的上下文决定。

相关问题