以下代码起作用并生成给定结果的原因是什么?它是仅受PHP支持的特殊语言构造吗?如果是这样,那一个呢?还是仅仅是简单的php-ism?
class Foo {};
$a = new Foo();
$b = new $a();
var_dump($a); // class Foo#1 (0)
var_dump($b); // class Foo#2 (0)
答案 0 :(得分:0)
PHP允许您从像这样的变量创建对象实例:
$a = 'Foo';
$b = new $class;
因此,当您使用new $var
时,PHP将检查它是否是用于创建该类的新实例的字符串,并且如果它是一个对象,则它将检索该对象实例的类名并创建一个来自它的新实例。
如果您尝试对非字符串或非对象变量执行相同操作:
$a = 1;
$b = new $a;
这将产生一个错误:
PHP错误:类名必须是有效的对象或字符串
PHP 5.3.0引入了两种创建对象实例的新方法,这是您所提供的方案的一个示例:
class Test {}
$obj1 = new Test();
$obj2 = new $obj1;
有关更多信息:请阅读示例#5在 https://www.php.net/manual/en/language.oop5.basic.php#language.oop5.basic.new
下创建新对象