- <?php
- $var = "laruence";
- $var_dup = $var;
- $var = 1;
- ?>
很明显在这段代码执行以后,$var_dup的值应该还是”laruence”, 那么这又是怎么实现的呢?
这就是PHP的copy on write机制:
PHP在修改一个变量以前,会首先查看这个变量的refcount,如果refcount大于1,PHP就会执行一个分离的例程, 对于上面的代码,当执行到第三行的时候,PHP发现$var指向的zval的refcount大于1,那么PHP就会复制一个新的zval出来,将原zval的refcount减1,并修改symbol_table,使得$var和$var_dup分离(Separation)。这个机制就是所谓的copy on write(写时复制)。
本文探讨了PHP中copy-on-write机制的工作原理。通过具体代码示例解释了当变量引用计数大于1时,如何通过复制新实例并更新符号表来确保变量修改不影响其他引用。
2048

被折叠的 条评论
为什么被折叠?



