PHP 7中的匿名类

Eli*_*jus 23 php anonymous-class php-7

我在哪里可以使用,我应该使用PHP 7中提供的匿名类?我找不到他们的用例.

$message = (new class() implements Message {
public function getText() { return "Message"; }});
Run Code Online (Sandbox Code Playgroud)

mar*_*osh 29

您可以在此处找到您要查找的信息,其中包含RFC.

该部分的要点Use cases如下:

  • 模拟测试变得很容易.为接口创建动态实现,避免使用复杂的模拟API.
  • 继续使用这些类超出它们定义的范围
  • 避免使用自动加载器进行简单的实现


小智 9

我还发现这在编写特征单元测试时很有用,这样你就可以只测试特征方法,即:

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());
}
Run Code Online (Sandbox Code Playgroud)


MAC*_*rha 5

正如 Rasmus Lerdorf 在 WeAreDevelopers See 网站上谈到 PHP7 的新功能时所说:

(在YouTube上观看)

匿名类,就像匿名函数一样;基本上,您可以即时启动类并将其丢弃。就我个人而言,我从未使用过它,但有些框架人员说这很重要。我仍然有点怀疑,但它很容易实现;比我聪明的人都说“是的,是的,这很有用”!好的!

编辑

考虑一下 Lerdorf 先生上面的引文,匿名类并不意味着真的毫无用处。

例如,通过同时定义和实例化类,它对于某种单例模式很有用。

或者,另一个例子是用它实现嵌套类。看到这个