首先咱先看到例子,最简单不过的执行流程了:
Example 1: gc.php
<?php
error_reporting(E_ALL);
$a = 'I am test.';
$b = & $a;
echo $b ."\n";
?>
不用说 % 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 ."\n";
echo $b ."\n";
?>
执行结果依然很明显: 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 ."\n";
echo $b ."\n";
?>
是不是得想一下下呢? 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 ."\n";
echo $b ."\n";
?>
其实如果 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() 的操作已经断开了指向,所以后继的操作不会对符号表的任何内存的引用记数造成影响了.