首先咱先看到例子,最简单不过的执行流程了: Example 1: gc.php <?php error_reporting(E_ALL); $a = 'I am test.'; $b = & $a;
echo $b ." "; ?>
不用说 % php -f gc.php 输出结果非常明了: hy0kl% php -f gc.php I am test.
好,下一个: Example 2: <?php error_reporting(E_ALL); $a = 'I am test.'; $b = & $a;
$b = 'I will change?';
echo $a ." "; echo $b ." "; ?> 执行结果依然很明显: hy0kl% php -f gc.php I will change? I will change?
君请看: Example 3: <?php error_reporting(E_ALL); $a = 'I am test.'; $b = & $a;
unset($a);
echo $a ." "; echo $b ." "; ?> 是不是得想一下下呢? hy0kl% php -f gc.php Notice: Undefined variable: a in /usr/local/www/apache22/data/test/gc.php on line 8 I am test. 有点犯迷糊了吗?
君再看: Example 4: <?php error_reporting(E_ALL); $a = 'I am test.'; $b = & $a;
unset($b);
echo $a ." "; echo $b ." "; ?> 其实如果 Example 3 理解了,这个与之异曲同工. hy0kl% php -f gc.php I am test. Notice: Undefined variable: b in /usr/local/www/apache22/data/test/gc.php on line 9
君且看: Example 5: <?php error_reporting(E_ALL); $a = 'I am test.'; $b = & $a;
Notice: Undefined variable: a in /usr/local/www/apache22/data/test/gc.php on line 10 $a = $b = I am test. 第一次 unset() 的操作已经断开了指向,所以后继的操作不会对符号表的任何内存的引用记数造成影响了.