摘要:以下為中的各種變量在底層實現中是如何存儲的。變量方法常量類名保存在的時候的是不區分大小寫的,但是類名字本身在中還是有大小寫的小寫保持原樣
以下為 PHP 中的各種變量在底層實現中是如何存儲的。
變量:$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的時候的 key 是不區分大小寫的,但是類名字本身在 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
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/29543.html
摘要:在編寫一段析構方法的研究代碼中,我遇到了交叉知識點導致的錯誤在不同作用域,析構方法與引用次數導致了不一樣的結果。前提本文假裝你已經明白什么是析構方法作用域及引用次數。當析構函數的調用鉤子去檢測引用數時,全局的實例自然無法觸發這個事件。 在編寫一段析構方法的研究代碼中,我遇到了交叉知識點導致的錯誤——在不同作用域,析構方法與引用次數導致了不一樣的結果。 前提 本文假裝你已經明白什么是析構...
摘要:小駝峰法大駝峰法匈牙利命名法變量名屬性類型對象描述。是一種弱類型語言,變量在使用之前并不需要聲明類型,且同一變量可以保存多種不同類型的數據。另外,在函數內部創建的靜態變量是無法在函數外部使用的。 變量標識符 標識符即是變量的名稱,PHP 中關于變量的標識符有以下規則: 由任意字母、數字、下劃線組成,但不能以數字開頭 嚴格區分大小寫 為了科學規范標識符,主要有以下幾種流行的命名方式:...
摘要:每種程序語言都有自己的作用域實現,的作用域是怎么實現的呢先看一段代碼。那在底層是怎么實現這樣的效果的引擎本身有結構,該結構中的是全局符號表,其中保存了頂層作用域的變量也就是全局變量。那局部變量呢其實每個函數都有一個自己的符號表。 每種程序語言都有自己的作用域實現,php的作用域是怎么實現的呢? 先看一段php代碼。 $bar = out; function scope(){ ...
摘要:以上結果會輸出那么可以看到被作為了變量通過傳遞給了匿名函數作為參數使用如果去掉的注釋,那么以上結果會輸出將上面的函數改寫為以上結果會輸出說明在中第二次為賦值的時候,并沒有傳遞的到函數里面去。 ??在項目中,難免會遇到閉包的形式,那么在閉包中,變量的作用域到底是怎么樣的呢。下面有幾個簡單的例子。 e1 function test_1() { $a = php; $func...
摘要:作用域是指在一個腳本中某個變量可以使用或可見的范圍。具有項基本的作用域規則內置超級全局變量可以在腳本的任何地方使用和可見。在一個腳本中聲明的全局變量在整個腳本中是可見的,函數內部除外。 作用域是指在一個腳本中某個變量可以使用或可見的范圍。 php具有6項基本的作用域規則: 內置超級全局變量可以在腳本的任何地方使用和可見。 常量,一旦被聲明,將可以在全局可見;也就是說,它們可以在函數...
摘要:和函數幾乎是相同的,二者的區別在于函數失敗后,函數將給出一個致命錯誤,而函數只是給出一個警告。關鍵字將終止函數的執行。很多情況下,遞歸可以取代循環,但是遞歸函數比循環慢而且要占用更多內存。 筆記內容來源于《PHP和MySql Web開發》 一,代碼重用的好處:1.可以降低成本;2.增加代碼的可靠性;3.提高他們的一致性。 二,使用require()和include()函數:1.使用一條...
閱讀 2034·2021-11-11 16:54
閱讀 2111·2019-08-30 15:55
閱讀 3611·2019-08-30 15:54
閱讀 391·2019-08-30 15:44
閱讀 2228·2019-08-30 10:58
閱讀 424·2019-08-26 10:30
閱讀 3048·2019-08-23 14:46
閱讀 3191·2019-08-23 13:46