1、php中的变量都存放在zval的变量容器中。zval的结构如下表所示:
类型 | 值 | is_ref | refcount |
2、将一个变量 赋值给另一个变量时(例如:$a=$b),不会立即为新变量$a分配内存空间,而是在原变量$b的zval中给refcount加1。 只有当原变量或者发生改变时,才会为新变量分配内存空间,同时原变量的refcount减 1 。当然,如果unset原变量,新变量直接就使用原变量的zval而不是重新分配。&引用赋值时,原变量的is_ref 变为1,refcount 加1. 如果给一个变量&赋值,会为$a变量分配空间。