Welcome to the website navigation,本站只接受合法正规的企业网站,欢迎站长们提交你的网站获得展示和流量有任何问题请联系站长,欢迎大家加入本站。

                
提交网站
  • 网站:76083
  • 待审:5
  • APP:577
  • 文章:304416
  • 会员:56004
文字内链包年1000元 文字内链包年1000元 文字内链包年1000元 AI办公网站 AI绘画工具 AIchat

名站导航为爱好php程序的朋友们提供php相关的教程知识。

通过前面章节的描述,我们已经知道了PhP程序中变量的存储方式--所有的变量都保存在zval结构中。 下面介绍一下PhP程序内核如何实现变量的定义方式以及作用域。7HmAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

在ZE进行词法和语法的分析之后,生成具体的opcode,这些opcode最终被execute函数(Zend/zend_vm_execute.h:46)解释执行。 在excute函数中,有以下具体代码如下:7HmAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

while (1) { 
    ... 
    if ((ret = EX(opline)->handler(execute_data TSRMLS_CC)) > 0) {
        switch (ret) {
            case 1:
                EG(in_execution) = original_in_execution;
                return;
            case 2:
                op_array = EG(active_op_array);
                goto zend_vm_enter;
            case 3:
                execute_data = EG(current_execute_data);
            default:
                break;
        }     
    }     
    ...
}

这里的EX(opline)->handler(...)将op_array中的操作顺序执行, 其中变量赋值操作在ZEND_ASSIGN_SPEC_CV_CONST_hANDLER()函数中进行。 ZEND_ASSIGN_SPEC_CV_CONST_hANDLER中进行一些变量类型的判断并在内存中分配一个zval,然后将变量的值存储其中。 变量名和指向这个zval的指针,则会存储于符号表内。 ZEND_ASSIGN_SPEC_CV_CONST_hANDLER的最后会调用ZEND_VM_NEXT_OPCODE()将op_array的指针移到下一条opline, 这样就会形成循环执行的效果。7HmAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

在ZE执行的过程中,有四个全局的变量,这些变量都是用于ZE运行时所需信息的存储:7HmAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

//_zend_compiler_globals 编译时信息,包括函数表等
zend_compiler_globals    *compiler_globals;  
//_zend_executor_globals 执行时信息
zend_executor_globals    *executor_globals; 
//_php_core_globals 主要存储php.ini内的信息
php_core_globals         *core_globals; 
//_sapi_globals_struct SAPI的信息
sapi_globals_struct      *sapi_globals;

在执行的过程中,变量名及指针主要存储于_zend_executor_globals的符号表中,_zend_executor_globals的结构这样的:7HmAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

struct _zend_executor_globals {
...
/* symbol table cache */
hashTable *symtable_cache[SYMTABLE_CAChE_SIZE];
hashTable **symtable_cache_limit;
hashTable **symtable_cache_ptr;
 
zend_op **opline_ptr;
 
hashTable *active_symbol_table;  /* active symbol table */
hashTable symbol_table;     /* main symbol table */
 
hashTable included_files;   /* files already included */
...
}

在执行的过程中,active_symbol_table会根据执行的具体语句不断发生变化,针对线程安全的EG宏就是用来取此变量中的值。 ZE将op_array执行完毕以后,hashTable会被FREE_hAShTABLE()释放掉。 如果程序使用了unset语句来主动消毁变量,则会调用ZEND_UNSET_VAR_SPEC_CV_hANDLER来将变量销毁, 回收内存,7HmAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!


7HmAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

名站网址导航

PhP程序内核探索:变量赋值与销毁7HmAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

7HmAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

好了关于php程序的知识就说到这里希望可以帮助需要的朋友。,

标签:

分享到:

  admin

注册时间:

网站:0 个   APP:3 个  文章:0 篇

  • 76083

    网站

  • 577

    APP

  • 304416

    文章

  • 56004

    会员

赶快注册账号,推广您的网站吧!
文章分类
热门网站
最新入驻APP小程序

宝贝市场2023-02-08

宝贝市场——买手和卖家商品展示

夺宝助手2023-02-08

夺宝助手小程序,查看每日快夺宝平

查诚信2023-02-08

查诚信是一款免费的商业查询工具

车价天天报2023-02-08

快速连接汽车销售,获知汽车最新报

考勤助理小程序2023-02-08

上班签到考勤,实时定位,后台轻松

汽车报价大全查询2023-02-08

汽车报价大全查询提供最新汽车市