以下代码工作并生成给定结果的原因是什么?它是一种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)
最佳答案
php允许您从如下变量创建对象实例:
$a = 'Foo';
$b = new $a;
因此,当您使用
new $a
时,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下创建新对象