2

我有一个愚蠢的问题。我想在 C# 2-3 年后学习 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;
}

但是错误发生SimpleEnumISimple.

也许是不可能的,但我想问你如何SimpleEnum在界面中使用 as type ?

谢谢

4

3 回答 3

2

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

此外,在 PHP 中,没有严格的类型控制。因此,如果您想声明属性,只需使用public $enum = nullinit __construct()it即可$this->enum = ...;

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

于 2012-10-13T07:10:53.917 回答
2

不可能,但如果您需要 $myEnum 专门为 SimpleEnum,那么只需在合同(界面)中要求它,因此任何参展课程都必须效仿。你可以通过类型提示来做到这一点

interface ISimple {
    public function setMyEnum(SimpleEnum $myEnum);
}
于 2012-10-13T07:24:23.900 回答
1

Type Juggling中所述:

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

于 2012-10-13T07:08:20.247 回答