这里学生的类方法和变量也会受到影响并出现在其他对象中,即$ 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 发布了大致相同的内容,但为了举例起见,我将把它留在这里)