对象引用传递
class Person {
public $name;
public $age;
function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
}
$one = new Person('one', 1);
$one_alias = $one;
$one_alias->age = 2;
var_dump($one, $one_alias);
对象引用传递, 赋值之后修改的是同一个地址空间
object(Person)#1 (2) {
[“name”]=>
string(3) “one”
[“age”]=>
int(2)
}
object(Person)#1 (2) {
[“name”]=>
string(3) “one”
[“age”]=>
int(2)
}
对象克隆
对象克隆, 复制出一个新的空间
$one = new Person('one', 1);
$one_clone = clone $one;
$one_clone->age = 2;
var_dump($one, $one_clone);
object(Person)#1 (2) {
[“name”]=>
string(3) “one”
[“age”]=>
int(1)
}
object(Person)#2 (2) {
[“name”]=>
string(3) “one”
[“age”]=>
int(2)
}
对象克隆并初始化
对象克隆,复制一个新的空间,并初始化某些内容
class Person {
public $name;
public $age;
function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
/**
* 使用clone关键字时自动调用__clone,用于给新克隆对象赋初值,$this 指向的是新科隆出的对象
*/
function __clone() {
$this->name = 'clone_one';
}
}
$one = new Person('one', 1);
$one_clone = clone $one;
var_dump($one, $one_clone);
object(Person)#1 (2) {
[“name”]=>
string(3) “one”
[“age”]=>
int(1)
}
object(Person)#2 (2) {
[“name”]=>
string(9) “clone_one”
[“age”]=>
int(1)
}