变量(Variables)
If a variable is assigned within a cycle or it’s re-assigned is important to initialize it to NULL in its declaration.By doing this, PHALCON_INIT_NVAR will know if the variable needs memory or it already have memory allocated.
PHP7 中 提供 ZVAL_COPY_VALUE、`ZVAL_COPY](
PHP7 中 提供 SEPARATE_STRING、SEPARATE_ARRAY、 `SEPARATE_ZVAL与
SEPARATE_ZVAL_IF_NOT_REF`等宏定义来实现变量分离。都会预先判断是否需要引用计数(IS_TYPE_REFCOUNTED)的类型,如果需要才会进行分离。
SEPARATE_STRING - 如果类型是 ISTYPE_REFCOUNTED 并且引用计数大于 1,将执行 _zval_copy_ctor_func,并减少自身的引用计数。
SEPARATE_ZVAL - 如果引用计数大于 1,是可被复制的(ISTYPE_COPYABLE)或是不可变的(IS_TYPE_IMMUTABLE)类型,将执行 _zval_copy_ctor_func,如果是引用类型(ISREFERENCE)的值将先减少自身的引用计数,然后使用 _ZVAL_DUP 复制。
SEPARATE_ZVAL_IF_NOT_REF - 如果类型是可被复制的(ISTYPE_COPYABLE)或是不可变的(IS_TYPE_IMMUTABLE)类型,并且引用计数大于 1 将执行 _zval_copy_ctor_func,如果是引用类型(IS_REFERENCE)的值将使用 Z_DELREF_P` 先减少自身的引用计数