PHP 匿名类
最后修改于 2025 年 3 月 11 日
PHP 匿名类允许您内联定义和实例化一个类,而无需为其命名。 它们对于创建简单的、一次性对象或用于实现接口和即时扩展类非常有用。 本教程涵盖了匿名类的基本和高级用法,并附有实际示例。
匿名类在您只需要一个类的单次使用,并且不想用不必要的类定义来混乱代码的情况下特别有用。
基本匿名类
此示例演示了如何创建和使用基本的匿名类。
basic_anonymous.php
<?php declare(strict_types=1); $greeting = new class { public function sayHello(): string { return "Hello, World!"; } }; echo $greeting->sayHello(); // Output: Hello, World!
匿名类使用 new class
语法实例化并分配给变量 $greeting
。然后调用 sayHello
方法来显示消息。
实现一个接口
此示例展示了如何创建实现接口的匿名类。
implement_interface.php
<?php declare(strict_types=1); interface Greeting { public function sayHello(): string; } $greeting = new class implements Greeting { public function sayHello(): string { return "Hello, World!"; } }; echo $greeting->sayHello(); // Output: Hello, World!
匿名类实现了 Greeting
接口,并为 sayHello
方法提供了实现。
扩展一个类
此示例演示了如何创建一个扩展现有类的匿名类。
extend_class.php
<?php declare(strict_types=1); class BaseGreeting { public function sayHello(): string { return "Hello, Base!"; } } $greeting = new class extends BaseGreeting { public function sayHello(): string { return "Hello, Anonymous!"; } }; echo $greeting->sayHello(); // Output: Hello, Anonymous!
匿名类扩展了 BaseGreeting
类并重写了 sayHello
方法。
使用构造函数参数
此示例展示了如何将参数传递给匿名类的构造函数。
constructor_arguments.php
<?php declare(strict_types=1); $greeting = new class("World") { private string $name; public function __construct(string $name) { $this->name = $name; } public function sayHello(): string { return "Hello, " . $this->name . "!"; } }; echo $greeting->sayHello(); // Output: Hello, World!
匿名类接受一个构造函数参数,该参数用于自定义 sayHello
方法的输出。
使用 Traits
此示例演示了如何在匿名类中使用 Traits。
use_traits.php
<?php declare(strict_types=1); trait GreetingTrait { public function sayHello(): string { return "Hello, Trait!"; } } $greeting = new class { use GreetingTrait; }; echo $greeting->sayHello(); // Output: Hello, Trait!
匿名类使用 GreetingTrait
trait 提供 sayHello
方法。
带有属性的匿名类
此示例展示了一个带有类型化属性的匿名类。
properties.php
<?php declare(strict_types=1); $person = new class { public string $name = "Anonymous"; public int $age = 30; public function getInfo(): string { return "Name: $this->name, Age: $this->age"; } }; echo $person->getInfo(); // Output: Name: Anonymous, Age: 30
匿名类定义了类型化属性和一个用于显示它们的方法。
匿名类作为回调
此示例使用匿名类作为回调对象。
callback.php
<?php declare(strict_types=1); function processCallback(object $callback): string { return $callback->execute(); } $result = processCallback(new class { public function execute(): string { return "Callback executed!"; } }); echo $result; // Output: Callback executed!
匿名类作为对象传递给期望回调的函数。
具有多个方法的匿名类
此示例展示了一个具有多个类型化方法的匿名类。
multiple_methods.php
<?php declare(strict_types=1); $calculator = new class { public function add(int $a, int $b): int { return $a + $b; } public function multiply(int $a, int $b): int { return $a * $b; } }; echo $calculator->add(5, 3); // Output: 8 echo "\n"; echo $calculator->multiply(4, 2); // Output: 8
匿名类提供了具有严格类型用于数学运算的多个方法。
匿名类的最佳实践
- 用于一次性对象:将匿名类用于只需要一次的对象。
- 保持简单:避免在匿名类中使用复杂的逻辑,以保持可读性。
- 实现接口:使用匿名类来实现接口或即时扩展类。
- 使用 Traits:利用 Traits 在匿名类中重用功能。
来源
在本文中,我们探讨了使用 PHP 匿名类的各种示例,包括基本用法、实现接口、扩展类、使用构造函数参数和利用 Traits。
作者
列出 所有 Python 教程。