PHP 7.0+ 中无创建匿名类的内置函数,必须使用 new class 语法直接定义并实例化;支持继承、实现接口、构造参数及类体,不可动态拼接或赋值调用。

PHP 7.0+ 中没有“内置函数”用于创建匿名类,匿名类的实例化是通过语言关键字 new class 完成的——它是一个语法结构,不是函数调用,也不属于 function_exists() 能识别的内置函数范畴。
你不能写 anonymous_class(...) 或类似调用,只能用 new class 语法直接定义并实例化。
怎么快速实例化匿名类?
核心就一条:用 new class + 可选的继承/实现 + 构造参数 + 类体。
✅ 正确写法(立即可用):
立即学习“PHP免费学习笔记(深入)”;
-
最简形式(无继承、无接口、无参数):
`$obj = new class { public function say() { return 'Hi'; } };` -
带构造参数(必须显式声明
__construct):
`$logger = new class('api') { private $ctx; public function __construct($ctx) { $this->ctx = $ctx; } public function log($m) { echo "[{$this->ctx}] {$m}"; } };` -
继承父类:
`$svc = new class('Custom') extends BaseService { private $name; public function __construct($name) { $this->name = $name; } };` -
实现接口(推荐场景):
`$app->setLogger(new class implements Logger { public function log($msg) { echo $msg; } });`
常见误区澄清
❌ 不是函数,所以不能:
- 赋值给变量再调用(如
$make = 'new class'; $obj = $make();→ 语法错误) - 动态拼接字符串后
eval()(极度不推荐,安全风险高,且破坏可读性) - 期望有类似
class_anonymous_create()这样的内置函数(PHP 中不存在)
✅ 替代思路(如果真要“封装”实例化逻辑):
- 写一个普通工厂函数,内部用
new class返回对象(合法且清晰) - 用闭包返回匿名类实例(适合配置化场景)
- 在测试中批量生成 mock 对象时,直接内联
new class更轻量、意图更明确
为什么不用函数而用 new class?
设计上,匿名类本质是「运行时定义并立即实例化的类」,和 new StdClass 或 new DateTime 一样,属于对象创建语法。PHP 把它做成关键字而非函数,是为了:
- 保持与
new Xxxx()一致的语义直觉 - 支持继承(
extends)、实现(implements)、构造参数等完整类特性 - 避免反射或调试时混淆(函数调用栈里不会出现“匿名类函数”这种概念)
不复杂但容易忽略。



















