在php中常量的結構只是在變數的基礎上新增了一些額外的元素:
typedef struct _zend_constant zend_constant;
php常量定義方式:
define('^_^', 'think in php');
define定義常量過程:
/*
... // 類常量定義 此處不做介紹
... // 值型別判斷和處理
c.value = *val;
zval_copy_ctor(&c.value);
if (val_free)
c.flags = case_sensitive; /* non persistent */
c.name = zend_strndup(name, name_len);
c.name_len = name_len+1;
c.module_number = php_user_constant;
if (zend_register_constant(&c tsrmls_cc) == success) else
} /* }}} */
上面的**已經對物件和類常量做了簡化處理,其實現上是乙個將傳遞的引數傳遞給新建的zend_constant結構,並將這個結構體註冊到常量列表中的過程。第三個引數表示大小寫敏感,預設為false.
php對於常量的名稱沒有具體的限制,常量賦值時需要用constant()方法來獲取到。否則在語法解析時會報錯。
//$var = ^_^; //語法錯誤
$var = constant("^_^");
flags的標記除了const_cs,還可以為const_persistent和const_ct_subst.
const_persistent表示該常量可持久化,非持久化的常量在請求結束(rshutdown)時就會被釋放,否則在mshutdown釋放。使用者空間的常量為費持久化,拓展模組和核心中常量會設定為持久化,提公升執行效率。
const_ct_subst表示allow compile-time substitution(在編譯時可被替換)。
PHP魔術常量探索與總結
複習 驗證 更新貼 要點 6 1.php中有7個魔術常量 line file dir function class method namespace 2.特殊常量不區分大小寫 3.其值隨著它們在 中的位置改變而改變 4.如果使用了名字空間,那麼顯示 funcion class method 時,前面...
PHP核心探索筆記 函式
函式的定義是乙個將函式名註冊到函式列表的過程 1.詞法分析 function將會生成t function標記 2.語法分析 3.生成中間 生成的中間 為 zend declare function 根據這個中間 及運算元對應的op type。我們可以找到中間 的執行函式為 zend declare ...
PHP核心探索 變數概述
現代程式語言中的基本元素主要有 變數,流程控制介面,函式等等我能否不使用變數來編寫程式呢?這顯然是可以的,例如 複製 如下 php echo hello andhm 這個程式很簡單,輸出乙個字串內容。就和我們僅僅使用二進位制也能程式設計一樣,不使用變數也能完成大部分的工作,不使用變數我們的程式將喪失...