日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

PHP內核探索 —— 變量的存儲

瀏覽:22日期:2022-09-16 14:33:45

PHP中的變量類型和值是通過C語言實現的,內核具體是如何組織用戶在PHP中定義的變量呢?

HashTable在ZE內核中被廣泛使用,PHP變量也正是存儲在一個HashTable實現的符號表里。當在PHP中調用一個函數或者類時,內核會創建一個新的符號表,這也是為什么在函數中無法使用函數外部定義的變量的原因。因為他們分屬兩個符號表,一個當前作用域,一個全局作用域。

現在來看內核中是如何定義作用域的:

struct _zend_executor_globals { //略 HashTable symbol_table;//全局變量的符號表 HashTable *active_symbol_table;//局部變量的符號表 //略 };

可以通過EG宏來訪問變量符號表,EG(symbol_table)訪問全局作用域的變量符號表,EG(active_symbol_table)訪問當前作用域的變量符號表。

<?php $foo=’bar’; ?>

上面這段代碼很簡單,創建變量foo,并賦值bar。之后的PHP代碼中就可以調用$foo變量了。現在看看PHP中定義的變量,內核中是如何實現的。偽代碼:

zval* foo; MAKE_STD_ZVAL(foo); ZVAL_STRING(foo, 'bar', 1); ZEND_SET_SYMBOL( EG(active_symbol_table), 'foo', foo);第一步:創建一個zval結構,并設置類型。第二步:賦值為bar。第三步:將其加入當前作用域符號表,只有這樣用戶才能在PHP里使用這個變量。

通過簡單的這三步,即可實現定義PHP變量。簡單的原因,在于內核為我們提供了強大的宏。現在我們將宏分別展開。

MAKE_STD_ZVAL應用到的宏有:

#define MAKE_STD_ZVAL(zv) ALLOC_ZVAL(zv);INIT_PZVAL(zv) #define ALLOC_ZVAL(z) ZEND_FAST_ALLOC(z, zval, ZVAL_CACHE_LIST) #define ZEND_FAST_ALLOC(p, type, fc_type) (p) = (type *) emalloc(sizeof(type)) #define INIT_PZVAL(z) (z)->refcount__gc = 1;(z)->is_ref__gc = 0;

MAKE_STD_ZVAL(foo)展開后得到:

(foo) = (zval *) emalloc(sizeof(zval)); (foo)->refcount__gc = 1; (foo)->is_ref__gc = 0;

可以看出,MAKE_STD_ZVAL做了三件事:分配內存、初始化zval結構中的refcount、is_ref。

ZVAL_STRING應用到的宏有:

#define ZVAL_STRING(z, s, duplicate) { const char *__s=(s); Z_STRLEN_P(z) = strlen(__s); Z_STRVAL_P(z) = (duplicate?estrndup(__s, Z_STRLEN_P(z)):(char*)__s); Z_TYPE_P(z) = IS_STRING; } #define Z_STRLEN_P(zval_p) Z_STRLEN(*zval_p) #define Z_STRLEN(zval) (zval).value.str.len #define Z_STRVAL_P(zval_p) Z_STRVAL(*zval_p) #define Z_STRVAL(zval) (zval).value.str.val #define Z_TYPE_P(zval_p) Z_TYPE(*zval_p) #define Z_TYPE(zval) (zval).type #define IS_STRING 6

展開后得到:

const char *__s=('foo'); (foo).value.str.len=strlen(__s); (foo).value.str.val=(duplicate?estrndup(__s, (zval).value.str.len):(char*)__s); (foo).type=6;

ZVAL_STRING做的工作是設置數據類型并賦值。

ZEND_SET_SYMBOL這里只展開一部分宏,因為它展開后過于復雜。

# define EG(v) (executor_globals.v)

展開部分后得到:

ZEND_SET_SYMBOL(executor_globals.active_symbol_table, 'foo', foo);

將變量名入當前作用域符號表。之所以使用內核提供的宏來分配內存、注冊變量作用域,是因為這樣能提高兼容性。

標簽: PHP
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品日韩精品在线播放| 日韩和欧美一区二区| 日韩一区二区久久| 精品三级av在线导航| 亚洲黄页一区| 日韩欧美一区二区三区在线观看| 国产精品国产三级在线观看| 亚洲最新av| 夜夜嗨一区二区| 亚洲欧美综合| 老牛国内精品亚洲成av人片| 国产成人精选| 少妇精品导航| 亚洲女人av| 国产日韩欧美一区| 日本久久黄色| 欧美99久久| 日韩免费精品| 精品99在线| 欧美成人国产| 日本成人一区二区| 高清av一区| 亚洲激情av| 国产亚洲一卡2卡3卡4卡新区| 精品五月天堂| 日韩精品专区| 久久www成人_看片免费不卡| 欧美日韩亚洲一区在线观看| 精品免费av| 国产精品91一区二区三区| 一本一道久久a久久| 欧美激情一区| 激情综合网五月| 国产日韩中文在线中文字幕| 色婷婷色综合| 亚洲欧美视频| 精品日产乱码久久久久久仙踪林| 香蕉精品久久| 日韩高清不卡一区| 都市激情国产精品| 欧美日韩国产精品一区二区亚洲| 日本中文字幕一区二区视频| 高潮久久久久久久久久久久久久| 一区二区视频欧美| 国产香蕉精品| 极品日韩av| 欧美亚洲免费| 日韩不卡在线| 日韩国产精品久久久| 午夜久久中文| 日韩欧美在线精品| 伊人久久视频| 日本中文字幕视频一区| 久久久男人天堂| 婷婷亚洲成人| 成人亚洲欧美| 日韩不卡一区二区三区| 日韩成人亚洲| 国产精品一区免费在线| 亚洲大全视频| 欧美激情麻豆| 一区二区三区国产在线| 亚洲黄色网址| 国产伦理一区| 亚洲精品电影| 美女国产精品久久久| 国产午夜精品一区二区三区欧美| 欧美精品不卡| 亚洲伊人影院| 在线一区视频观看| 国产日韩一区二区三区在线 | 日韩不卡视频在线观看| 视频一区日韩| 丝袜av一区| 国产福利亚洲| 中文字幕av一区二区三区人| 综合日韩av| 久久激情五月婷婷| 国产亚洲毛片| 91视频精品| 国产精品99久久免费| 日韩在线卡一卡二| 麻豆精品蜜桃| 久久精品国产在热久久| 午夜久久av| 最新日韩av| 99精品美女| 中文字幕成在线观看| 国产精品久久| 日韩av网站在线观看| 久久亚洲风情| 99久久夜色精品国产亚洲狼| 国产成人免费av一区二区午夜| 欧美在线日韩| 97久久精品| 四虎精品永久免费| 日韩在线卡一卡二| 欧美精品一线| 久久在线免费| 久久青草久久| 三级小说欧洲区亚洲区| 国产成人精品免费视| 日韩高清电影免费| 一区二区国产在线观看| 午夜久久99| 免费视频一区三区| 在线日韩电影| 亚洲午夜视频| 国产韩日影视精品| 91久久中文| 亚洲一区日本| 玖玖精品视频| 免费成人av在线播放| 国产美女精品| 丝袜脚交一区二区| 午夜在线精品| 亚洲精品伊人| 欧美亚洲网站| 久久不见久久见国语| 久久在线91| 国产一区三区在线播放| 精品久久久网| 日韩av片子| 日本精品不卡| 亚洲精品成人| 蜜桃视频在线观看一区二区| 天堂va蜜桃一区二区三区| 蜜桃av一区二区在线观看| 国产精品免费看| 亚州欧美在线| 国产精品久久久久久久久久齐齐 | 日韩综合小视频| 欧美片第1页综合| 国产精品久久久久久久久久白浆| 欧美精品不卡| 日韩亚洲一区在线| 91九色精品| 制服诱惑一区二区| 亚洲免费毛片| 欧美精品观看| 精品三级国产| 99久久婷婷这里只有精品| 亚洲女同一区| 无码日韩精品一区二区免费| 国产精品99久久免费观看| 日本一二区不卡| 欧美91福利在线观看| 亚洲欧美日韩国产综合精品二区| 亚洲在线久久| 国产精品一区二区99| 国产伦久视频在线观看| 亚洲成人精选| 日韩欧美在线精品| 国产va免费精品观看精品视频| 精品亚洲美女网站| 久久电影一区| 欧美精品91| 91成人超碰| 国产日韩视频在线| 精品亚洲美女网站| 亚洲精品乱码| 91中文字幕精品永久在线| 99视频一区| 国产精品第十页| 欧美日韩精品一区二区视频| 亚洲另类黄色| 国产一区二区亚洲| 午夜欧美在线| 国产伦精品一区二区三区在线播放 | 国产韩日影视精品| 日韩精品免费一区二区夜夜嗨| 精品亚洲二区| 香蕉久久久久久久av网站| 国产日韩欧美三级| 久久亚洲精品中文字幕蜜潮电影| 一区二区三区网站| 成人在线视频中文字幕| 天堂成人国产精品一区| 久久精品一本| 夜夜精品视频| 美女精品久久| 蜜桃视频一区二区三区在线观看| 久久av日韩| 免费在线观看日韩欧美| 四虎国产精品免费观看| 亚洲91网站| 色天使综合视频| 日韩不卡一区二区三区| 亚洲不卡av不卡一区二区| 日本综合视频| 在线日韩电影| 欧美国产极品| 免费人成在线不卡| 国产精选在线| 婷婷综合电影| 欧美成人高清| 国产一区二区三区不卡视频网站| 中文一区一区三区免费在线观| а√天堂中文在线资源8| 91欧美日韩在线|