我正在阅读 php 枚举文档,据我了解,这个最基本形式的新功能是让我们设置要在类中使用的常量以进行类型检查。
有什么方法可以处理类吗?例子:
enum ClassEnum {
case \App\Model\Test;
case \App\Model\AnotherTest;
}
不,你不能像那样使用枚举。但是有几个选择。
首先也是最重要的将是使用一个接口,它为实现必须公开哪些方法以及其他代码可以期望使用哪些方法与之交互设置协定。
interface FooInterface {
public function doThing();
}
class Foo implements FooInterface {
public function doThing() {
printf("%s: thing!\n", __CLASS__);
}
}
class Bar implements FooInterface {
public function doThing() {
printf("%s: thing!\n", __CLASS__);
}
}
class InterfaceTest {
public function __construct(FooInterface $obj) {
$obj->doThing();
}
}
$t1 = new InterfaceTest(new Foo());
$t2 = new InterfaceTest(new Bar());
在极少数情况下,您想使用多个非扩展类型,您也可以使用PHP 8 中引入的复合类型:
class CompositeTest {
public function __construct(Foo|Bar $obj) {
$obj->doThing();
}
}
$c1 = new CompositeTest(new Foo());
$c2 = new CompositeTest(new Bar());
以上两个片段都将输出:
Foo: thing!
Bar: thing!
但我极力推荐使用接口,因为它使您的代码更灵活,更易于编写和维护。