我有一个愚蠢的问题。我想在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
作为类型?
谢谢
答案 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不要求(或支持)变量声明中的显式类型定义;变量的类型由使用变量的上下文决定。