zoukankan      html  css  js  c++  java
  • php的静态变量的实现

    1.静态变量的结构 

          php脚本编译之后会生成执行opcode组成的opcode_array,执行每个zend_op_array都会生成一个单独的zend_execute_data结构。 php的局部变量分配在zend_execute_data结构上,生命周期在opcoe_array执行开始分配,执行结束释放。静态变量时一种特殊的局部变量,执行结束后并不会释放,而是保存下来下次执行时候直接调用不再初始化。

          所以可以看出来php的静态变量并不是存储在zend_execute_data结构中,静态变量的保存位置在zend_opcode->static_variables,这是一个hash表,直接保存在zend_op_array中,静态变量的初始化发生在编译阶段而不是执行阶段,在编译阶段定义一个静态变量,插入到zend_op_array的static_variables中,再次执行并不会重置static_variables表,这样的话静态变量的初始值只能是确定的值,不能是变量。

    2.静态变量的访问

          局部变量编译时确定一个编号进行读写操作,静态变量通过hash表保存在static_variables,编译时首先判断当前编译的zend_op_array->static_variables是否已创建,未创建则分配一个HashTable,接着将定义的静态变量插入,然后创建一个引用赋值给局部变量。

                               

  • 相关阅读:
    P4556 [Vani有约会]雨天的尾巴
    [模拟赛20180809] 旅程
    【jzoj3464】秀姿势
    【noip2013】火柴排队
    做运动
    【noip2013】花匠
    【noip2016】愤怒的小鸟
    【bzoj4326】【noip2015】运输计划
    作业二:个人编程项目——编写一个能自动生成小学四则运算题目的程序
    自我介绍
  • 原文地址:https://www.cnblogs.com/hellohell/p/9101155.html
Copyright © 2011-2022 走看看