PHP 7 中的匿名类

2022-08-30 13:39:08

我可以在哪里使用,我应该使用PHP 7中呈现的匿名类吗?我找不到它们的用例。

$message = (new class() implements Message {
public function getText() { return "Message"; }});

答案 1

您可以在此处找到要查找的信息,其中显示了 RFC。

“用例”部分的要点如下:

  • 模拟测试变得像馅饼一样简单。为接口创建动态实现,避免使用复杂的模拟 API。
  • 将这些类的使用保留在定义它们的范围之外
  • 避免在琐碎的实现中点击自动加载器

答案 2

我还发现这在编写特征单元测试时很有用,因此您可以仅测试特征方法,即:

trait MyTrait 
{
    public method foo(): string
    {
        return 'foo';
    }
}
...
public function setUp(): void
{
    $this->testObject = (new class() {
        use MyTrait;
    });
}
public function testFoo(): void
{
    $this->assertEquals('foo', $this->testObject->foo());
}

推荐