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