PHP變數的架構

PHP變數的內部架構:
struct _zval_struct

    zvalue_value value;  //變數的值
    zend_uint refcount;  //變數被引用的次數
    zend_uchar type;  //變數的類型
    zend_uchar is_ref;  //變數的分離
};

zend_uint refcount-以下是取得變數被引用次數的方式:
$var = 1;
debug_zval_dump($var);
$var_dup = $var;
debug_zval_dump($var);
由於function的參數引用也會被計算在內,所以輸出的結果是:
refcount(2)
refcount(3)

zend_uchar is_ref-以下是變數分離的作用:
$var = "laruence";
$var_ref = &$var;
$var_ref = 1;
執行後,$var也會被修改為1,當以上第二行被執後,$var的zval中的refcount會變成2,而is_ref將會變成1,當第三行執行時,php將會檢查$var_ref的zval中的is_ref,如果是1,就不做變數分離。

相關的文章:
The Truth About PHP Variables

沒有留言: