它可以是 静态全局变量,如果不调用unset,那么这个静态变量会一直存在,直到程序退出时才由zend内存管理来释放
它可以是 静态局部变量:在函数里定义,函数执行完后,该静态变量不会消失
它可以是 静态成员变量:在类里定义,它可以在所有类的对象中共享
例如
u.constant;
} else {
init_zval(*tmp);
}
if (!cg(active_op_array)->static_variables) {//初始化静态变量的hash 键值
alloc_hashtable(cg(active_op_array)->static_variables);
//初始化hash值
zend_hash_init(cg(active_op_array)->static_variables, 2, null, zval_ptr_dtor, 0);
}
zend_hash_update(cg(active_op_array)->static_variables, varname->u.constant.value.str.val, varname->u.constant.value.str.len+1, &tmp, sizeof(zval *), null);
if (varname->op_type == is_const) {
if (z_type(varname->u.constant) != is_string) {
convert_to_string(&varname->u.constant);
}
}
opline = get_next_op(cg(active_op_array) tsrmls_cc);
opline->result.op_type = is_var;
opline->result.u.ea.type = 0;
opline->result.u.var = get_temporary_variable(cg(active_op_array));
opline->op1 = *varname;
set_unused(opline->op2);
opline->op2.u.ea.type = zend_fetch_static;
result = opline->result;
if (varname->op_type == is_const) {
zval_copy_ctor(&varname->u.constant);
}
fetch_simple_variable(&lval, varname, 0 tsrmls_cc); /* relies on the fact that the default fetch is bp_var_w */ www.2cto.com
if (fetch_type == zend_fetch_lexical) {
znode dummy;
zend_do_begin_variable_parse(tsrmls_c);
zend_do_assign(&dummy, &lval, &result tsrmls_cc);
zend_do_free(&dummy tsrmls_cc);
} else {
zend_do_assign_ref(null, &lval, &result tsrmls_cc);
}
cg(active_op_array)->opcodes[cg(active_op_array)->last-1].result.u.ea.type |= ext_type_unused;
/* zval_dtor(&varname->u.constant); */
}
http://www.bkjia.com/phpjc/477784.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/477784.htmltecharticle静态变量 它可以是 静态全局变量,如果不调用unset,那么这个静态变量会一直存在,直到程序退出时才由zend内存管理来释放 它可以是 静态局部...
