可変範囲(here定義されるような)リファレンスリターンのPHPの変数スコープ?
変数のスコープは、それが定義された範囲内のコンテキストです。ほとんどの場合、すべてのPHP変数は1つのスコープしか持たない。この1つのスコープは、インクルードされたファイルと必要なファイルにまたがっています。
//b.php <?php class b { include("a.php"); $ainstance = new a; var_dump($ainstance->func()); } ?>
__
//a.php
<?php
class a {
function &func() {
$avar = array("one", "two", "three");
return $avar;
}
?>
予想通り上記のコードは、(I機能func
に形成された構造WRTを意味する)変数に関する情報をダンプします。
私の疑問は、それは、関数のスコープ内にあるとき
は変数が格納されている、ということでしょうか?- コールスタック上にある場合は、関数の終了時に変数をクリーニング/破棄しないでください。
- 変数が破壊されていない(上記のコードのとおり)ので、なぜ破壊されないのですか?あるいはPHPは変数を保存してヒープに参照するためのメカニズムを持っていますか?
- PHPにコールスタックはまったくありますか?
私はそれを理解していませんが。 [zval](http://php.net/manual/en/features.gc.refcounting-basics.php)を通過します。 +1はzvalを指しています。 – ThinkingMonkey
あなたが知る必要があるのは、変数を返すときに、PHPは自動的に変数の* copy *を返します。これは、Cの例のように、あなた自身がコピーを作成する必要がある(Cの文字列を返すときなど)。 – netcoder
ええ、私はそれを理解しました。 zvalを指摘してくれてありがとう。 – ThinkingMonkey