<?php
//深入理解PHP对象赋值
echo '<pre>';
$obj = new StdClass;
$obj->name = 'Pig';
var_dump($obj); //object(stdClass)#1 (1) { ["name"]=> string(3) "Pig" }
$copy = $obj; //$obj ,$copy都是new StdClass返回的同一个标识符的拷贝
var_dump($copy); //object(stdClass)#1 (1) { ["name"]=>string(3) "Pig" }
$objRef = &$obj; //此时会将$obj转换成引用,然后赋值给$objRef,因此$obj,$objRef都为引用
var_dump($objRef); //object(stdClass)#1 (1) { ["name"]=>string(3) "Pig" }
$objClone = clone $obj; //新空间
$obj->name = 'After Clone';
var_dump($objClone); //object(stdClass)#1 (1) { ["name"]=>string(3) "Pig" }
var_dump($obj); //object(stdClass)#1 (1) { ["name"]=>string(11) "After Clone" }
$objClone->name = "After OBJ";
//unset是删除引用效果
$nameRef = &$obj->name; //$obj->name被转换成引用(& string),然后赋给$nameRef
var_dump($obj); //object(stdClass)#2 (1) { ["name"]=>&string(11) "After Clone" }
unset($nameRef); //删除引用
var_dump($obj); //object(stdClass)#1 (1) { ["name"]=>string(11) "After Clone" }
//null是赋值效果
$nameRef = &$obj->name; //恢复name的引用
var_dump($obj); //object(stdClass)#2 (1) { ["name"]=>&string(11) "After Clone" }
$nameRef = null;
var_dump($obj); //object(stdClass)#2 (1) { ["name"]=>&NULL }
unset($objRef); //仅仅删除了引用
var_dump($obj); //object(stdClass)#1 (1) { ["name"]=>&NULL }
$objRef = &$obj; //恢复对象引用
$obj->name = 'Lucy';
$obj = null; //赋值$obj为null,$obj只是new StdClass的标识拷贝,不会影响其内容。
//$objRef做为$obj的引用,会同时被赋值null
//等价 $objRef = null;
var_dump($obj,$copy,$objRef,$objClone);
// NULL,
// object(stdClass)#1 (1) { ["name"]=>&string(4) "Lucy" },
// NULL,
// object(stdClass)#1 (1) { ["name"]=>string(3) "Pig" }
作者:
Zjmainstay