ReflectionClass::newInstance

(PHP 5, PHP 7, PHP 8)

ReflectionClass::newInstance使用给定参数创建新的类实例

描述

public ReflectionClass::newInstance(mixed ...$args): object

创建一个新的类实例。给定的参数将传递给类构造函数。

参数

args

接受可变数量的参数,这些参数将传递给类构造函数,就像 call_user_func() 一样。

返回值

错误/异常

如果类构造函数不是 public,则会抛出 ReflectionException

如果类没有构造函数,并且 args 参数包含一个或多个参数,则会抛出 ReflectionException

参见

添加笔记

用户贡献笔记 1 条笔记

-11
glen at delfi dot ee
8 年前
看起来反射类 newInstance 创建了代码在内存中的表示,其中使用了值,所以使用引用作为构造函数签名,你不能使用此方法。

因为同样的输入如果通过 new 调用,或者 new $class 会起作用,但通过反射就不行

class a {
public function __construct(&$a, $c) {
}
}

// 这有效
$A = new stdClass();
$a = new a($A, 11);

// 这也有效
$classname = "a";
$a = new $classname($A, 10);

// 但这会失败
$r = new ReflectionClass("a");
$r->newInstance($A, 10);

PHP 警告:a::__construct() 的参数 1 预期为引用,但提供的值为 reflection.php 第 15 行

PHP 警告:ReflectionClass::newInstance():a 的构造函数调用失败,位于 reflection.php 第 15 行
To Top