走進php核心 之 常量(constant)

2021-10-07 03:39:11 字數 1584 閱讀 8818

常量的具體實現前面章節已經介紹過,這裡不再重複。php提供了很多用於常量註冊的巨集,可以在擴充套件的php_minit_function()中定義:

//註冊null常量

#define register_null_constant(name, flags) \

zend_register_null_constant((name), sizeof(name)-1, (flags), module_number)

//註冊bool常量

#define register_bool_constant(name, bval, flags) \

zend_register_bool_constant((name), sizeof(name)-1, (bval), (flags), module_number)

//註冊整形常量

#define register_long_constant(name, lval, flags) \

zend_register_long_constant((name), sizeof(name)-1, (lval), (flags), module_number)

//註冊浮點型常量

#define register_double_constant(name, dval, flags) \

zend_register_double_constant((name), sizeof(name)-1, (dval), (flags), module_number)

//註冊字串常量,str型別為char*

#define register_string_constant(name, str, flags) \

zend_register_string_constant((name), sizeof(name)-1, (str), (flags), module_number)

//註冊字串常量,擷取指定長度,str型別為char*

#define register_stringl_constant(name, str, len, flags) \

zend_register_stringl_constant((name), sizeof(name)-1, (str), (len), (flags), module_number)

除了上面這些還有register_ns_***系列的巨集用於帶namespace的常量註冊,另外如果這些型別不能滿足需求,則可以通過zend_register_constant(zend_constant *c)註冊,比如常量型別為陣列。

php_minit_function(mytest)

echo my_cons_1;

*****====[output]*****====

this is a constant

如果在擴充套件中需要用到其他擴充套件或核心定義的常量,則可以通過以下函式獲取常量的值:

zend_api zval *zend_get_constant(zend_string *name);

zend_api zval *zend_get_constant_str(const char *name, size_t name_len);

php中const定義常量

const 常量 1.在定義時必須被初始值,2.前面不加任何修飾符 3.變數名字母一般都大寫 4.常量可以被子類繼承 5.乙個常量是屬於乙個類的,而不是某個物件的 作用 當某些值是固定不變的,就用const 1.const 定義的常量和define 定義的常量的區別?希望乙個成員變數不被修改 例如圓...

php核心探索 常量

在php中常量的結構只是在變數的基礎上新增了一些額外的元素 typedef struct zend constant zend constant php常量定義方式 define think in php define定義常量過程 類常量定義 此處不做介紹 值型別判斷和處理 c.value val ...

PHP物件導向之const常量修飾符

在php中定義常量是通過define 函式來完成的,但在類中定義常量不能使用define 而需要使用const修飾符。類中的常量使用const定義後,其訪問方式和靜態成員類似,都是通過類名或在成員方法中使用self訪問,但在php 5.3.0之後也可以使用物件來訪問。被const定義的常量不能重新賦...