变量(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_STRINGSEPARATE_ARRAY`SEPARATE_ZVALSEPARATE_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` 先减少自身的引用计数