论对象魔术方法与值传递

$a1 = new test();
$a3 = clone $a1;
$a4 = $a1;
$a5 = &$a1;

/*
* clone 新对象与原对象,属同一个类,属性和属性值相同,但是为全新对象
* 修改新对象属性,原对象属性不发生变化
*/
$a3 = 'str';
var_dump($a1); //$a1仍为对象

/*
* 新对象与原对象,属同一个类,属性和属性值相同,但是只是新增了一个对象标识符,内存中的对象值为同一个
* 修改新对象属性,原内存中对象属性值也同样发生变化;
* 当新对象变为字符串,只是新对象的对象标识符发生变化(即不再引用内存中对象值),因此原对象对象标识符不变,且引用内存中对象值
*/
$a4 = 'str';
var_dump($a1); //$a1仍为对象

/*
* 新对象与原对象,属同一个类,属性和属性值相同,并且共用一个对象标识符
* 当新对象变为字符串,共用的对象标识符发生变化,则原对象也变为字符串
*/
$a5 = 'str';
var_dump($a1); //$a1变为字符串

猜你喜欢

转载自www.cnblogs.com/samgo/p/9479973.html
今日推荐