• php分享三十三:常量


    一:常量定义

    1:在脚本执行期间该值不能改变(除了所谓的魔术常量,它们其实不是常量)

    2:常量默认为大小写敏感

    3:命名规则:用正则表达式是这样表达的:[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*

    在这里,字母指的是 a-z,A-Z,以及从 127 到 255(0x7f-0xff)的 ASCII 字符。

    4:

    如果使用了一个未定义的常量,PHP 假定想要的是该常量本身的名字,如同用字符串调用它一样(CONSTANT 对应 "CONSTANT")。此时将发出一个 E_NOTICE 级的错误。参见手册中为什么 $foo[bar] 是错误的(除非事先用 define() bar 定义为一个常量)。如果只想检查是否定义了某常量,用 defined() 函数。

    settings.php
    <?php
    // Debug mode
    define('DEBUG',false);
    ?>
    
    test.php
    <?php
    include('settings.php');
    
    if (DEBUG) {
       // echo some sensitive data.
    }
    ?>
    

     If for some reason settings.php doesn't get included and the DEBUG constant is not set, PHP will STILL print the sensitive data. The solution is to evaluate it. Like so:

    settings.php
    <?php
    // Debug mode
    define('DEBUG',0);
    ?>
    
    test.php
    <?php
    include('settings.php');
    
    if (DEBUG == 1) {
       // echo some sensitive data.
    }
    ?>
    

    5:heredoc中的常量不能被解释,如果需要调用,可以把常量封装到一个函数里,返回调用

    There is a way to access a constant in heredoc.
    Here is the example:
    <?php
    
    define("__STR",'constant.string.defined');
    
    function heredocGetConstant($constant) {
      return constant($constant);
    }
    
    $heredocGetConstant = 'heredocGetConstant';
    
    $my_string = <<<EOT
    This is my constant printed from heredoc: {$heredocGetConstant('__STR')}
    EOT;
    
    echo $my_string;
    
    Output:
    This is my constant printed from heredoc: constant.string.defined
    

    6:It is perfectly valid to use a built-in PHP keyword as a constant name - as long as you the constant() function to retrieve it later:

    define('echo', 'My constant value');
    
    echo constant('echo'); // outputs 'My constant value'
    

    7:动态的常量可以用constant()返回

    8:常量和(全局)变量在不同的名字空间中。这意味着例如 TRUE 和 $TRUE 是不同的。

    二:魔术常量(8个)

    __FUNCTION__; __FILE__; __LINE__; __NAMESPACE__; __TRAIT__; __CLASS__; __METHOD__; __DIR__;

    二:类常量const

    1:接口(interface)中也可以定义常量

    2:从php5.6开始常量可以用标量表单式了

    3:类常量可以被覆盖

    it's possible to declare constant in base class, and override it in child, and access to correct value of the const from the static method is possible by 'get_called_class' method:

    abstract class dbObject
    {    
        const TABLE_NAME='undefined';
        
        public static function GetAll()
        {
            $c = get_called_class();
            return "SELECT * FROM `".$c::TABLE_NAME."`";
        }    
    }
    
    class dbPerson extends dbObject
    {
        const TABLE_NAME='persons';
    }
    
    class dbAdmin extends dbPerson
    {
        const TABLE_NAME='admins';
    }
    
    echo dbPerson::GetAll()."<br>";//output: "SELECT * FROM `persons`"
    echo dbAdmin::GetAll()."<br>";//output: "SELECT * FROM `admins`"
    

    二:const和define定义常量的区别

    1:和使用 define() 来定义常量相反的是,使用 const 关键字定义常量必须处于最顶端的作用区域,因为用此方法是在编译时定义的。这就意味着不能在函数内,循环内以及 if 语句之内用 const 来定义常量。

    2:类常量中不能有变量,define中可以用

    The const keyword will not allow anything that may have to be "processed":
    
    $color = "red";
    const RED = "This is the color $color"; //Doesn't work
    define(strtoupper($color), "This is the color $color") // Works fine
    
  • 相关阅读:
    Guns 01 项目基本运行
    个人 比较好用的软件
    个人 软件开发 综合技能提升
    开源框架 综合知识
    开源框架 工作流框架
    开源框架 Java 开发框架 1
    开源框架 Java 管理系统
    开源框架 C#
    scp(安全拷贝)和rsync(增量复制)
    完全分布式集群的准备工作
  • 原文地址:https://www.cnblogs.com/Alight/p/5278390.html
Copyright © 2020-2023  润新知