PHP通过引用取消设置
我一直在阅读关于引用的PHP手册,有些东西让我感到困惑。它说引用不是指向内存地址的指针,而是 相反,它们是符号表 别名 如果引用指向符号表条目,而符号表条目又指向内存地址,那么这本质上不是一个指针吗 编辑: 一些很棒的答案。只是想把这个放在这里。。。如何取消设置另一个指向的变量PHP通过引用取消设置,php,pointers,reference,garbage-collection,unset,Php,Pointers,Reference,Garbage Collection,Unset,我一直在阅读关于引用的PHP手册,有些东西让我感到困惑。它说引用不是指向内存地址的指针,而是 相反,它们是符号表 别名 如果引用指向符号表条目,而符号表条目又指向内存地址,那么这本质上不是一个指针吗 编辑: 一些很棒的答案。只是想把这个放在这里。。。如何取消设置另一个指向的变量 $var = "text"; $ref =& $var; unset($ref); 看起来要让它工作,我还需要取消设置$var,以便GC将其删除。关键是,您不能像在其他一些语言中那样对“指针”执行算术操作,例如
$var = "text";
$ref =& $var;
unset($ref);
看起来要让它工作,我还需要取消设置
$var
,以便GC将其删除。关键是,您不能像在其他一些语言中那样对“指针”执行算术操作,例如C。在这些其他语言中,您可以执行类似“指针++”的操作,从而在内存中向前迈进一步。这在PHP中是不可能的。有一种奇妙的方法,它应该比PHP文档本身(gasp)更深入地解释一切,甚至可以解释变量创建时发生的事情
PHP在内部实现变量
通过称为
_zval_结构,通常简称为zval。除了
存储价值和信息
关于它的类型,zval也
指定引用计数。refcount
统计对对象的引用数
价值观和价值观对于
垃圾收集器的操作,
允许在运行时释放内存
不再使用
PHP中的引用只是一个
对应于相同变量的变量
zval作为另一个变量。工具书类
可以使用
作业的特殊形式
在等号后面加一个和
签字
无法通过引用取消设置变量,因为unset()实际上删除的是引用,而不是值。然后,垃圾回收器会清理每个没有任何引用的变量,包括原始变量名 这是件好事。想象两个对象在私有变量中持有对第三个对象的引用。如果一个对象取消设置其私有变量,则另一个对象将不受影响 如果您可以通过引用取消设置,则会违反公共/私有模型。 来自@Artefactor:
“在函数内部,如果要取消设置全局变量,必须使用unset($GLOBALS['varname']),而不是全局$varname;unset($varname);。”因为链接很好而被接受。所有精彩的答案!谢谢:)