我有这个代码在不同的类之间传递重变量。目标是在内存中不应该有任何重复值,因此变量通过referance而不是value传递。
我这里有这个样本。它在某种程度上工作正常。只是为了确保内存中的值不重复,我修改值或删除值以确保。
然后我认为UNSETing变量具有不同的效果并使其为NULL具有不同的效果。
如果我UNSET原始变量,那么我仍然从引用变量中获取值。如果我将原始变量设为NULL,则不返回任何内容。
以下是代码:
<?php
class a {
private $req;
public function store_request(&$value) {
$this->req = &$value;
}
public function get_request() {
return $this->req;
}
}
class b {
private $json;
private $obj;
public function init_req(&$request) {
$this->obj = new a;
$this->obj->store_request($request);
}
public function get_req() {
return $this->obj->get_request();
}
}
$locvar = 'i am here';
$b = new b;
$b->init_req($locvar);
$locvar = 'now here';
## This will not result empty echo from 'echo $b->get_req();'
//unset($locvar);
## This will result in empty echo from 'echo $b->get_req();'
//$locvar = null;
echo $b->get_req();
?>
注释了UNSET和NULL行。如果你试图一次一行地运行代码(我知道这是愚蠢的建议,但仍然:))
谁能告诉这里内部发生了什么?
答案 0 :(得分:3)
unset
对值的引用会删除对该值的引用,值本身以及指向它的其他引用都不会受到影响。