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