为什么对象会自动从之前或之后启动的另一个对象继承值?

Amm*_*ech 6 php oop

这里学生的类方法和变量也会受到影响并出现在其他对象中,即$ obj1,为什么会发生这种情况?

class Student {
    public $name;
    public $age;
    public function callme() {
        return 'called';
    }
}

$obj = new Student();
$obj1 = $obj;
$obj->name = 'David';
$obj->age = 12;
echo '<pre>';
print_r($obj);
print_r($obj1);
echo $obj1->callme();
Run Code Online (Sandbox Code Playgroud)

输出:

Student Object
(
    [name] => David
    [age] => 12
)
Student Object
(
    [name] => David
    [age] => 12
)
called
Run Code Online (Sandbox Code Playgroud)

小智 3

当您执行以下操作时,此行为将在此处进行解释:

$obj = new Student();
$obj1 = $obj;
Run Code Online (Sandbox Code Playgroud)

$obj1实际上是一个引用,$obj因此任何修改都会反映在原始对象上。如果您需要一个新对象,请再次使用new关键字声明一个对象(因为这就是它的用途),如下所示:

$obj = new Student();
$obj1 = new Student();
Run Code Online (Sandbox Code Playgroud)

(另外,我在写这篇文章的过程中看到@Wizard 发布了大致相同的内容,但为了举例起见,我将把它留在这里)