PHP7匿名类的用法示例

1. 简介

PHP7中引入了匿名类,可以快速便捷地创建类。一般情况下,定义一个类需要使用class关键字,并且需要命名,而匿名类不需要命名,可以在定义时指定它的父类和接口。

2. 基本语法

匿名类的基本语法如下:

$anonymousClass = new class() extends MyBaseClass implements MyInterface {

// class definition

};

2.1 继承父类

匿名类可以继承自一个父类,如下:

class MyBaseClass {

public function myMethod() {

echo 'MyBaseClass';

}

}

$anonymousClass = new class() extends MyBaseClass {

public function myMethod() {

echo 'AnonymousClass';

}

};

$anonymousClass->myMethod(); // 输出 AnonymousClass

在定义匿名类时,使用extends关键字指定它的父类。

2.2 实现接口

匿名类也可以实现接口,如下:

interface MyInterface {

public function myMethod();

}

$anonymousClass = new class() implements MyInterface {

public function myMethod() {

echo 'AnonymousClass';

}

};

$anonymousClass->myMethod(); // 输出 AnonymousClass

在定义匿名类时,使用implements关键字指定它的接口。

3. 示例

下面通过一个示例来演示匿名类的用法。

interface Animal {

public function speak(): string;

}

class Dog implements Animal {

public function speak(): string {

return 'Woof!';

}

}

class Cat implements Animal {

public function speak(): string {

return 'Meow!';

}

}

$animals = [

new Dog(),

new Cat(),

new class implements Animal {

public function speak(): string {

return 'Moo!';

}

}

];

foreach ($animals as $animal) {

echo $animal->speak() . ' ';

}

在上面的示例中,定义了一个接口Animal,包含了一个方法speak。然后,定义了两个实现了Animal接口的类,分别是Dog和Cat。最后,使用匿名类创建了一个新的Animal实现,在foreach循环中遍历每一个Animal实现,调用speak方法并输出结果。这个匿名类没有实现任何额外的方法或属性,只是简单地重写了speak方法以返回'Moo!'。

4. 总结

匿名类是PHP7中的一个新特性,通过它可以快速便捷地创建类,并继承父类或实现接口。通过本文的介绍,大家应该能够可以灵活地使用匿名类了。

后端开发标签