1.php作為一種弱類型語言,不需要顯式的指明變數的類型,但是php變數也是有類型的,php變數包含以下8種變數(三大類) a.標量類型:boolean,integer,float(double),string b.複合類型:array,object c.特殊類型:resource,null 2.p
1.php作為一種弱類型語言,不需要顯式的指明變數的類型,但是php變數也是有類型的,php變數包含以下8種變數(三大類)
a.標量類型:boolean,integer,float(double),string
b.複合類型:array,object
c.特殊類型:resource,null
2.php使用c語言實現變數的原理
a.變數存儲結構
typedef struct _zval_struct zval; ... struct _zval_struct { /* Variable information */ zvalue_value value; /*存儲變數的值,是一個union類型*/ zend_uint refcount__gc;/*變數的引用計數,預設為1*/ zend_uchar type; /*變數的類型,為IS_NULL、IS_BOOL、IS_LONG、IS_DOUBLE、IS_STRING、IS_ARRAY、IS_OBJECT和IS_RESOURCE之一*/ zend_uchar is_ref__gc;/*表示是否為引用*/ };
b.存儲變數值得zvalue_value如下
typedef union _zvalue_value { long lval; /* long value */ double dval; /* double value */ struct { char *val; int len; } str; HashTable *ht; /* hash table value */ zend_object_value obj; } zvalue_value;
這裡使用union而不是struct是為了節省記憶體空間,以為一個變數同一時間只能表示一種類型
參考資料:tipi開源項目http://www.php-internals.com/book/?p=chapt03/03-01-00-variables-structure