• php 常量-标准常量


    标准常量的初始化
    通过define()函数定义的模块编号都是PHP_USER_CONSTANT这表示是用户定义的常量。除此之外我们在平时使用较多的常量:如错误报告级别E_ALL, E_WARNING等常量就有点不同了。这些是PHP内置定义的常量,他们属于标准常量
    在Zend引擎启动后,会执行如下的标准常量注册操作。 php_module_startup() -> zend_startup() -> zend_register_standard_constants()

     1 void zend_register_standard_constants(TSRMLS_D)
     2 {
     3     REGISTER_MAIN_LONG_CONSTANT("E_ERROR", E_ERROR, CONST_PERSISTENT | CONST_CS);
     4     REGISTER_MAIN_LONG_CONSTANT("E_RECOVERABLE_ERROR", E_RECOVERABLE_ERROR, CONST_PERSISTENT | CONST_CS);
     5     REGISTER_MAIN_LONG_CONSTANT("E_WARNING", E_WARNING, CONST_PERSISTENT | CONST_CS);
     6     REGISTER_MAIN_LONG_CONSTANT("E_PARSE", E_PARSE, CONST_PERSISTENT | CONST_CS);
     7     REGISTER_MAIN_LONG_CONSTANT("E_NOTICE", E_NOTICE, CONST_PERSISTENT | CONST_CS);
     8     REGISTER_MAIN_LONG_CONSTANT("E_STRICT", E_STRICT, CONST_PERSISTENT | CONST_CS);
     9     REGISTER_MAIN_LONG_CONSTANT("E_DEPRECATED", E_DEPRECATED, CONST_PERSISTENT | CONST_CS);
    10     REGISTER_MAIN_LONG_CONSTANT("E_CORE_ERROR", E_CORE_ERROR, CONST_PERSISTENT | CONST_CS);
    11     REGISTER_MAIN_LONG_CONSTANT("E_CORE_WARNING", E_CORE_WARNING, CONST_PERSISTENT | CONST_CS);
    12     REGISTER_MAIN_LONG_CONSTANT("E_COMPILE_ERROR", E_COMPILE_ERROR, CONST_PERSISTENT | CONST_CS);
    13     REGISTER_MAIN_LONG_CONSTANT("E_COMPILE_WARNING", E_COMPILE_WARNING, CONST_PERSISTENT | CONST_CS);
    14     REGISTER_MAIN_LONG_CONSTANT("E_USER_ERROR", E_USER_ERROR, CONST_PERSISTENT | CONST_CS);
    15     REGISTER_MAIN_LONG_CONSTANT("E_USER_WARNING", E_USER_WARNING, CONST_PERSISTENT | CONST_CS);
    16     REGISTER_MAIN_LONG_CONSTANT("E_USER_NOTICE", E_USER_NOTICE, CONST_PERSISTENT | CONST_CS);
    17     REGISTER_MAIN_LONG_CONSTANT("E_USER_DEPRECATED", E_USER_DEPRECATED, CONST_PERSISTENT | CONST_CS);
    18 
    19     REGISTER_MAIN_LONG_CONSTANT("E_ALL", E_ALL, CONST_PERSISTENT | CONST_CS);
    20 
    21     REGISTER_MAIN_LONG_CONSTANT("DEBUG_BACKTRACE_PROVIDE_OBJECT", DEBUG_BACKTRACE_PROVIDE_OBJECT, CONST_PERSISTENT | CONST_CS);
    22     REGISTER_MAIN_LONG_CONSTANT("DEBUG_BACKTRACE_IGNORE_ARGS", DEBUG_BACKTRACE_IGNORE_ARGS, CONST_PERSISTENT | CONST_CS);
    23     /* true/false constants */
    24     {
    25         zend_constant c;
    26     
    27         c.flags = CONST_PERSISTENT | CONST_CT_SUBST;
    28         c.module_number = 0;
    29 
    30         c.name = zend_strndup(ZEND_STRL("TRUE"));
    31         c.name_len = sizeof("TRUE");
    32         c.value.value.lval = 1;
    33         c.value.type = IS_BOOL;
    34         zend_register_constant(&c TSRMLS_CC);
    35         
    36         c.name = zend_strndup(ZEND_STRL("FALSE"));
    37         c.name_len = sizeof("FALSE");
    38         c.value.value.lval = 0;
    39         c.value.type = IS_BOOL;
    40         zend_register_constant(&c TSRMLS_CC);
    41 
    42         c.name = zend_strndup(ZEND_STRL("NULL"));
    43         c.name_len = sizeof("NULL");
    44         c.value.type = IS_NULL;
    45         zend_register_constant(&c TSRMLS_CC);
    46 
    47         c.flags = CONST_PERSISTENT;
    48 
    49         c.name = zend_strndup(ZEND_STRL("ZEND_THREAD_SAFE"));
    50         c.name_len = sizeof("ZEND_THREAD_SAFE");
    51         c.value.value.lval = ZTS_V;
    52         c.value.type = IS_BOOL;
    53         zend_register_constant(&c TSRMLS_CC);
    54 
    55         c.name = zend_strndup(ZEND_STRL("ZEND_DEBUG_BUILD"));
    56         c.name_len = sizeof("ZEND_DEBUG_BUILD");
    57         c.value.value.lval = ZEND_DEBUG;
    58         c.value.type = IS_BOOL;
    59         zend_register_constant(&c TSRMLS_CC);
    60     }
    61 }

    定义了一堆标准常量,REGISTER_MAIN_LONG_CONSTANT()是一个宏,用于注册一个长整形数字的常量,因为C是强类型语言,不同类型的数据等分别处理。在 zend_constants.c和zend_constants.h中有这些宏的声明和定义

    for remember
  • 相关阅读:
    封装Web Uploader 上传插件、My97DatePicker、百度 编辑器 的使用 (ASP.NET MVC)
    记一次 Newtonsoft.Json 巧妙的用法(C#)
    使用 ItextSharp HTML生成Pdf(C#)
    go 发布
    Winform 使用DotNetBar 根据菜单加载TabControl
    Winform 使用DotNetBar 设置界面为Office2007 样式
    DataTable 导出到TXT
    (Winform程序带源码) 弹出输入框和获取输入框的值
    C# 返回指定目录下所有文件信息
    Winform 应用DotnetBar
  • 原文地址:https://www.cnblogs.com/dearmrli/p/9438316.html
Copyright © 2020-2023  润新知