php核心探索 常量

2021-07-08 21:51:36 字數 1147 閱讀 3349

在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 這個程式很簡單,輸出乙個字串內容。就和我們僅僅使用二進位制也能程式設計一樣,不使用變數也能完成大部分的工作,不使用變數我們的程式將喪失...