異なるクラス間で重い変数を渡すためのこのコードがあります。目的は、変数が値ではなく参照によって渡されるように、メモリ内に値の重複があってはならないことです。
このサンプルはここにあります。1つの方法を除いて正常に動作します。値がメモリ内で重複していないことを確認するために、値を変更するか、値を削除して確認します。
次に、変数のUNSETを解除すると効果が異なり、NULLにすると効果が異なることがわかりました。
元の変数の設定を解除しても、参照されている変数から値を取得します。元の変数を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行はコメント化されています。コードを一度に1行ずつ実行しようとしている場合(これはここではばかげたアドバイスですが、それでも:))
誰かがここで内部で何が起こっているのか教えてもらえますか?