看起来反射类 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 行