一个变量,实际在程序中是有三部分组成的。其一是名称,其二是地址,第三,在此地址的存储空间中保存的内容。
变量,实际是申请一个存储空间,并给这个存储空间起一个名字。
我们用一组U盘来做比方。首先,我们给U盘编号,1,2,3,4。假如就有这4个U盘。
那么,现在所说的,1号U盘,与我们计算机中用储存地址访问是一样的。所以,我们把U盘编号当成计算机内存中的物理地址,
如果这样可以理解,接下来,我们说变量。我们要用的第一个变量,就是1号U盘。所以程序中给个名字是A。这时,变量名就是A。
当我们用第二个变量,是用2号U盘。给个名字是B。这时,就是另一个新变量。
然后,我们把1号U盘借给同事,在他那,给个名字是C。他也就是使用了你的原有的A变量。这时,程序就是 $A=&$C
由此可以看出,&是取已知变量的地址作为他的地址。从而实现了对同一地址内容的操作。
我们来看看D,是指的4号U盘。其中内容是:内容在1号U盘。(我们看到这个信息,肯定能够找到我们所要的。)
这就是说,4号U盘中保存的是一个地址。变量中,如果数据区保存的是到另一变量的地址。这种方式叫指针。
所以,引用是变量的别名,而指针是保存的地址。
有指针的指针。但没有指针的引用。因为根本没有必要。同样,引用的引用,仍是引用。如同你有N个网名。可以说都是你的网名,也可以说是你网名的网名。
从程序角度说,无论引用还是指针,均是由地址操作来实现的。
PHP引用不能理解也在这里,因为PHP不讲&号的二重用途。变量定义中, &表示的是引用。 PHP中好象没有引用的变量定义。 只有引用形参定义。即: func(& $a)
但, $a = &&b 这不是引用定义, 而实际是一个caozuofu.html" target="_blank">操作符。 叫 取地址。这就是说, $a 取 $b 的地址。说成大白话,那就是, $a 是 $b的一个别名。
最后:关于变量生死的问题。如果我们封杀网上某个ID,这个人不会死。而我们如果说要销掉某人的户口,则此人已经死了。或被死掉了。所以,对于前面的那行代码,unset($a),$b仍继续存在。unset($b);则$a肯定同时没有了。
PHP中只有引用,没有指针。当我们给函数传入变量,同时又要将此变量传出时,就完全可以使用引用。PHP5中,对象是默认用引用传递的。所以,对象有__clone方法,在需要时复制。在不同的作同域希望同时操作一个变量,可以使用引用。更多的,你可以查看PHP的手册了。