摘要:局部變量中局部變量分配在結構上,每次執行都會生成一個新的,局部變量在執行之初分配,然后在執行結束時釋放,這是局部變量的生命周期。
1.局部變量
PHP中局部變量分配在zend_execute_data結構上,每次執行zend_op_array都會生成一個新的zend_execute_data,局部變量在執行之初分配,然后在執行結束時釋放,這是局部變量的生命周期。
讀寫操作:局部變量通過編譯時確定的編號進行讀寫操作
2.靜態變量
靜態變量的保存位置:zend_op_array->static_variables,這是一個哈希表,所以PHP中的靜態變量與普通局部變量不同,它們沒有分配在執行空間zend_execute_data上,而是以哈希表的形式保存在zend_op_array中。靜態變量只會初始化一次,注意:它的初始化發生在編譯階段而不是執行階段,這個特性也意味著靜態變量初始的值不能是變量,比如:static $count = $xxx;這樣定義將會報錯
讀寫操作:首先根據變量名在static_variables中取出對應的zval,然后將它修改為引用類型并賦值給局部變量,也就是說static $count = 4;包含了兩個操作,嚴格的將$count并不是真正的靜態變量,它只是一個指向靜態變量的局部變量,執行時實際操作是:$count = & static_variables["count"];
3.全局變量
全局變量在整個請求執行期間始終存在,它們保存在EG( executor_globals,Zend執行器相關的全局變量)的symbol_table中,與靜態變量的存儲一樣,這也是一個哈希表,在zend_execute_ex執行開始之前會把當前作用域下的所有全局變量添加到EG的symbol_table中.
讀寫操作:與靜態變量的訪問一樣,全局變量也是將原來的值轉換為引用,然后在global導入的作用域內創建一個局部變量指向該引用
4.常量
常量存儲在EG的zend_constants哈希表中,訪問時也是根據常量名直接到哈希表中查找
typedef struct _zend_constant { zval value; //常量值 zend_string *name; //常量名 } zend_constant;
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28565.html
1.EG(executor_globals/zend_executor_globals) PHP整個生命周期中最主要的一個結構,是一個全局變量,在main執行前分配(非ZTS下),直到PHP退出,它記錄著當前請求全部的信息 showImg(https://segmentfault.com/img/bV8fW0?w=960&h=777); 2.EX(execute_data/zend_execut...
摘要:代碼的編譯的解析過程任務就是將代碼轉化為數組,代碼里的所有信息都保存在數組中,然后將數組交給引擎執行,就是內核具體執行的命令,比如賦值加減操作函數調用等,每一條都對應一個處理,這些是提前定義好的函數。 1.PHP代碼的編譯 PHP的解析過程任務就是將PHP代碼轉化為opcode數組,代碼里的所有信息都保存在opcode數組中,然后將opcode數組交給zend引擎執行,opcode就是...
摘要:父類方法為錯誤,成員方法不得被重寫。父子類方法靜態屬性不一致父類方法為非靜態而子類的是靜態或相反,錯誤。 1.類的結構 類是編譯階段的產物,而對象是運行時產生的,它們歸屬于不同階段。編譯完成后我們定義的每個類都會生成一個zend_class_entry,它保存著類的全部信息,在執行階段所有類相關的操作都是用的這個結構, struct _zend_class_entry { ch...
摘要:插入一個元素時先將元素按先后順序插入數組,位置是,再根據的哈希值映射到散列表中的某個位置,將存入這個位置查找時先在散列表中映射到,得到在數組的位置,再從數組中取出元素。目前只有兩種類型會使用這種機制。 1.變量結構 typedef struct _zval_struct zval; typedef union _zend_value { zend_long ...
摘要:編譯工具這個腳本主要生成了編譯需要的配置以及擴展的基本結構這個腳本主要是獲取的安裝信息用于生成文件編寫擴展的基本步驟通過目錄下腳本生成擴展的基本框架修改配置設置編譯配置參數設置擴展的源文件依賴庫函數檢查等等定義一個這樣的編譯參數 1. 編譯工具 (a).ext_skel:這個腳本主要生成了編譯需要的配置以及擴展的基本結構 (b).php-config:這個腳本主要是獲取PHP的安裝信息...
閱讀 1273·2021-11-24 09:39
閱讀 1526·2021-09-07 09:59
閱讀 3484·2019-08-30 15:54
閱讀 2480·2019-08-30 11:00
閱讀 2675·2019-08-29 15:06
閱讀 2165·2019-08-26 13:52
閱讀 435·2019-08-26 13:24
閱讀 2501·2019-08-26 12:20