剖析結構體 zend/zend.h 標頭檔案
typedef struct _zval_struct zval;
typedef union _zvalue_value{
long lval;
double dval;
struct{
cha *val;
int len;
}str;
HashTable *ht; // HashTable 實現陣列的儲存,應用比較廣泛,有興趣可以閱讀 C 語言原始碼
zend_object_value obj;
}zvalue_value
struct _zval_struct {
zvalue_value value;
zend_uint refcount;
zend_uchar type;
zend_uchar is_ref;
};
zvalue_value value
: 變數的值,PHP 變數的值儲存在這裡zend_uint refcount
: 變數的引用數,變數引用計算器zend_char type
: 變數的型別zend_uchar is_ref
: 變數是否被引用
zval 結構體的 value 成員變數是一個 zvalue_value 聯合體
PHP 能支援任何結構也是因為這個聯合體
當變數是整數,整數的值會儲存到 long lval;
當變數是字串,字串的值會儲存到 str
PHP 語言層型別 | 儲存在 zvalue_value 的成員變數 |
---|---|
Long,bool,resource | lval |
double | dval |
string | str(len 長度,val 儲存字串的值) |
array | ht |
object | obj |
type 儲存變數的型別,如下
#define IS_NULL //表示 NULL 型別
#define IS_LONG //表示整數型別
#define IS_DOUBLE //表示浮點數型別
#define IS_STRING //表示字串型別
#define IS_ARRAY //表示陣列型別
#define IS_OBJECT //表示物件型別
#define IS_BOOL //表示 bool 型別
#define IS_RESOURCE //表示資源型別
今天剛在這論壇釋出第一篇文章,更多請關注我的 blog :https://blog.biyongyao.com
本作品採用《CC 協議》,轉載必須註明作者和本文連結