如何重新创建已经创建的对象(参见示例)

ʎɹn*_*ɹǝW 5 php oop

我正在看OOP Basics并看到这样的代码(简化了一下)

你可以看到这个类和输出

class Test{}

$a  = new Test();
$b = new $a;

var_dump($b == $a); // true
Run Code Online (Sandbox Code Playgroud)

我不明白的是,$b = new $a$a已经是一个对象,那么这个/为什么这个有用呢?如果我做vardump $a输出是:

object(Test)#1 (0) {
}
Run Code Online (Sandbox Code Playgroud)

那么,该变量如何与new关键字一起使用.我以为我们只能使用new已经定义的类,或者使用指向类ex的字符串:

$var = 'Test'; 
new $var; // ok 
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,$var是一个字符串,而不是另一个对象.

Rei*_*Rei 1

它是创建新对象的快捷方式。在 PHP 5.3.0 之前你必须这样做:

$class = get_class($instance);
$newInstance = new $class;
Run Code Online (Sandbox Code Playgroud)

从 PHP 5.3.0 开始,您可以使用以下命令执行相同的操作:

$newInstance = new $instance;
Run Code Online (Sandbox Code Playgroud)

我认为非常有用,因为它消除了对临时变量的需要。

澄清一下,这会创建新对象。它不是克隆。换句话说,__construct()将被调用而不是__clone().