摘要:以下為中的各種變量在底層實(shí)現(xiàn)中是如何存儲(chǔ)的。變量方法常量類名保存在的時(shí)候的是不區(qū)分大小寫的,但是類名字本身在中還是有大小寫的小寫保持原樣
以下為 PHP 中的各種變量在底層實(shí)現(xiàn)中是如何存儲(chǔ)的。
變量:$temp = "temp"; $temp2 = $temp; // key p *executor_globals.symbol_table.arData[7].key.val@4 p *executor_globals.symbol_table.arData[8].key.val@4 // value p *executor_globals.symbol_table.arData[7].val.value.zv.value.str.val@4 p *executor_globals.symbol_table.arData[8].val.value.zv.value.str.val@4 $temp = "temp"; $temp2 = &$temp; // value p *executor_globals.symbol_table.arData[7].val.value.zv.value.ref.val.value.str.val@4 p *executor_globals.symbol_table.arData[8].val.value.zv.value.ref.val.value.str.val@4方法:
function test(){ $temp = "temp"; static $test = "test"; } // function name p *executor_globals.function_table.arData[924].key.val@4 // function body p *executor_globals.function_table.arData[924].val.value.func // function temp variable key p *executor_globals.function_table.arData[924].val.value.func.op_array.vars[0].val@4 // function temp variable value p *executor_globals.function_table.arData[924].val.value.func.op_array.literals[0].value.str.val@4 // function static variable key p *executor_globals.function_table.arData[924].val.value.func.op_array.static_variables.arData[0].key.val@2 // function static variable value p *executor_globals.function_table.arData[924].val.value.func.op_array.static_variables.arData[0].val.value.ref.val.value.str.val@4常量:
// php define("AA", "aa"); // key p *executor_globals.zend_constants.arData[849].key.val@2 // value p *executor_globals.zend_constants.arData[849].val.value.zv.value.str.val@2class:
// php class Apple{ public $a = "avalue"; public $a2 = "avalue"; public static $b = "bvalue"; public static $b2 = "bvalue"; const E = "evalue"; const F = "fvalue"; public function test(){ ? $c = "cvalue"; ? vr_dump($this->a, $c); } ? public static function test2(){ ? $d = "dvalue"; ? vr_dump(self::$b, $d); } } $obj = new Apple(); $obj->test(); Apple::test2(); // class name 類名保存在class_table的時(shí)候的 key 是不區(qū)分大小寫的,但是類名字本身在 class_entry 中還是有大小寫的 p *executor_globals.class_table.arData[153].key.val@5 // 小寫 p *executor_globals.class_table.arData[153].val.value.ce.name.val@5 // 保持原樣 // class body p *executor_globals.class_table.arData[153].val.value.ce // class protetry key p *executor_globals.class_table.arData[153].val.value.ce.properties_info.arData[0].key.val@2 // class protetry value p *executor_globals.class_table.arData[153].val.value.ce.default_properties_table.value.str[0].val@6 // class static protetry value p *executor_globals.class_table.arData[153].val.value.ce.default_static_members_table.value.str[0].val@6 // class constanct name p *executor_globals.class_table.arData[153].val.value.ce.constants_table.arData[0].key // class constanct value p *executor_globals.class_table.arData[153].val.value.ce.constants_table.arData[0].val.value.zv.value.str.val@6 // class function name p *executor_globals.class_table.arData[153].val.value.ce.function_table.arData[0].key.val@4 // class function body p *executor_globals.class_table.arData[153].val.value.ce.function_table.arData[0].val.value.func // class function temp variable p *executor_globals.class_table.arData[153].val.value.ce.function_table.arData[0].val.value.func.op_array.vars[0].val
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/29543.html
摘要:在編寫一段析構(gòu)方法的研究代碼中,我遇到了交叉知識(shí)點(diǎn)導(dǎo)致的錯(cuò)誤在不同作用域,析構(gòu)方法與引用次數(shù)導(dǎo)致了不一樣的結(jié)果。前提本文假裝你已經(jīng)明白什么是析構(gòu)方法作用域及引用次數(shù)。當(dāng)析構(gòu)函數(shù)的調(diào)用鉤子去檢測(cè)引用數(shù)時(shí),全局的實(shí)例自然無法觸發(fā)這個(gè)事件。 在編寫一段析構(gòu)方法的研究代碼中,我遇到了交叉知識(shí)點(diǎn)導(dǎo)致的錯(cuò)誤——在不同作用域,析構(gòu)方法與引用次數(shù)導(dǎo)致了不一樣的結(jié)果。 前提 本文假裝你已經(jīng)明白什么是析構(gòu)...
摘要:小駝峰法大駝峰法匈牙利命名法變量名屬性類型對(duì)象描述。是一種弱類型語言,變量在使用之前并不需要聲明類型,且同一變量可以保存多種不同類型的數(shù)據(jù)。另外,在函數(shù)內(nèi)部創(chuàng)建的靜態(tài)變量是無法在函數(shù)外部使用的。 變量標(biāo)識(shí)符 標(biāo)識(shí)符即是變量的名稱,PHP 中關(guān)于變量的標(biāo)識(shí)符有以下規(guī)則: 由任意字母、數(shù)字、下劃線組成,但不能以數(shù)字開頭 嚴(yán)格區(qū)分大小寫 為了科學(xué)規(guī)范標(biāo)識(shí)符,主要有以下幾種流行的命名方式:...
摘要:每種程序語言都有自己的作用域?qū)崿F(xiàn),的作用域是怎么實(shí)現(xiàn)的呢先看一段代碼。那在底層是怎么實(shí)現(xiàn)這樣的效果的引擎本身有結(jié)構(gòu),該結(jié)構(gòu)中的是全局符號(hào)表,其中保存了頂層作用域的變量也就是全局變量。那局部變量呢其實(shí)每個(gè)函數(shù)都有一個(gè)自己的符號(hào)表。 每種程序語言都有自己的作用域?qū)崿F(xiàn),php的作用域是怎么實(shí)現(xiàn)的呢? 先看一段php代碼。 $bar = out; function scope(){ ...
摘要:以上結(jié)果會(huì)輸出那么可以看到被作為了變量通過傳遞給了匿名函數(shù)作為參數(shù)使用如果去掉的注釋,那么以上結(jié)果會(huì)輸出將上面的函數(shù)改寫為以上結(jié)果會(huì)輸出說明在中第二次為賦值的時(shí)候,并沒有傳遞的到函數(shù)里面去。 ??在項(xiàng)目中,難免會(huì)遇到閉包的形式,那么在閉包中,變量的作用域到底是怎么樣的呢。下面有幾個(gè)簡(jiǎn)單的例子。 e1 function test_1() { $a = php; $func...
摘要:作用域是指在一個(gè)腳本中某個(gè)變量可以使用或可見的范圍。具有項(xiàng)基本的作用域規(guī)則內(nèi)置超級(jí)全局變量可以在腳本的任何地方使用和可見。在一個(gè)腳本中聲明的全局變量在整個(gè)腳本中是可見的,函數(shù)內(nèi)部除外。 作用域是指在一個(gè)腳本中某個(gè)變量可以使用或可見的范圍。 php具有6項(xiàng)基本的作用域規(guī)則: 內(nèi)置超級(jí)全局變量可以在腳本的任何地方使用和可見。 常量,一旦被聲明,將可以在全局可見;也就是說,它們可以在函數(shù)...
摘要:和函數(shù)幾乎是相同的,二者的區(qū)別在于函數(shù)失敗后,函數(shù)將給出一個(gè)致命錯(cuò)誤,而函數(shù)只是給出一個(gè)警告。關(guān)鍵字將終止函數(shù)的執(zhí)行。很多情況下,遞歸可以取代循環(huán),但是遞歸函數(shù)比循環(huán)慢而且要占用更多內(nèi)存。 筆記內(nèi)容來源于《PHP和MySql Web開發(fā)》 一,代碼重用的好處:1.可以降低成本;2.增加代碼的可靠性;3.提高他們的一致性。 二,使用require()和include()函數(shù):1.使用一條...
閱讀 2196·2021-11-11 16:54
閱讀 2250·2019-08-30 15:55
閱讀 3747·2019-08-30 15:54
閱讀 532·2019-08-30 15:44
閱讀 2366·2019-08-30 10:58
閱讀 558·2019-08-26 10:30
閱讀 3182·2019-08-23 14:46
閱讀 3400·2019-08-23 13:46