我正在查看OOP Basics并看到这样的代码(简化了一下)
您可以看到此类和输出
class Test{}
$a = new Test();
$b = new $a;
var_dump($b == $a); // true
我不明白的是$b = new $a
,但$a
已经是一个对象,那么这是如何/为什么有效呢?如果我做vardump $a
,则输出为:
object(Test)#1 (0) {
}
那么,该变量如何与new
关键字一起使用。我认为我们只能将new
与已经定义的类一起使用,或者使用指向类ex的字符串:
$var = 'Test';
new $var; // ok
但在这种情况下,$var
是一个字符串,而不是另一个对象。
答案 0 :(得分:1)
这是创建新对象的快捷方式。在PHP 5.3.0之前,你必须这样做:
$class = get_class($instance);
$newInstance = new $class;
从PHP 5.3.0开始,您可以对此做同样的事情:
$newInstance = new $instance;
在我看来非常有用,因为它不需要临时变量。
为了澄清,这会创建新对象。
这不是克隆。
换句话说,将调用__construct()
而不是__clone()
。