PHP底层原理知其然知其所以然

北京看酒渣鼻的医院 http://news.39.net/bjzkhbzy/210117/8598835.html
1·、PHP变量的底层实现PHP代码执行图解1.1:变量在内存中的存储结构PHP变量是通过zval结构体来存储的,文件:Zend/zend.h行左右1.2:值的存储PHP变量的值是放在zval结构体中的value段中的,文件:Zend/zend.h1.3:结构体的字段解释struct_zval_struct{/*Variableinformation*/zvalue_valuevalue;/*变量的值,是个联合体*/zend_uintrefcount__gc;/*指向次数*/zend_uchartype;/*变量类型*/zend_ucharis_ref__gc;/*是否引用*/};type字段的值为以下常量IS_NULL,IS_BOOL,IS_LONG,IS_DOUBLEIS_STRING,IS_ARRAY,IS_OBJECTIS_RESOURCE1.4:联合体中的值typedefunion_zvalue_value{longlval;/*longvalue*/doubledval;/*doublevalue*/struct{char*val;intlen;}str;HashTable*ht;/*hashtablevalue*/zend_object_valueobj;}zvalue_value;联合中为什么只列出了5种值?NULL不用,zval的type为IS_NULL即可Bool以1,0存储在lval上resource的type为resource,其resource的内容用long来标志(资源标记)1.5:变量的结构图1.6:变量的创建创建变量的步骤:$str=hello;1:创建zval结构,并设置其类型IS_STRING2:设置其值为hello3:讲其加入符号表{zval*fooval;MAKE_STD_ZVAL(fooval);ZVAL_STRING(fooval,hello,1);ZEND_SET_SYMBOL(EG(active_symbol_table),foo,fooval);}1.7:符号表symbol_table符号表是什么?符号表是一张哈希表,里面存储了变量名-变量的zval结构体的地址,//zend/zend_globals.h行struct_zend_executor_globals{......HashTable*active_symbol_table;/*活动符号表*/HashTablesymbol_table;/*全局符号表*/HashTableincluded_files;/*filesalreadyincluded*/1.8:符号表与函数Zend/zend_


转载请注明:http://www.aierlanlan.com/cyrz/6657.html