【问题标题】:What is the best way to define a global constant in PHP which is available in all files?在 PHP 中定义可在所有文件中使用的全局常量的最佳方法是什么?
【发布时间】:2012-05-28 07:36:08
【问题描述】:

定义全局常量的最佳方法是什么,即在所有 PHP 文件中都可用?

更新:常量和类常量有什么区别?它们可以互换使用吗?

【问题讨论】:

    标签: php variables global-variables constants


    【解决方案1】:

    在您的 top .php 文件中定义您的常量,该文件将包含在所有其他脚本中。它可能是您的前端控制器、您的配置文件或为此单一目的而创建的文件。

    !defined('MY_CONST') && define('MY_CONST', 'hello');
    

    【讨论】:

    • 我发现这个简短的方法更具可读性:defined('CONST_NAME') || define('CONST_NAME', 'value');
    【解决方案2】:

    这取决于。在您的情况下,我会选择define(),因为它的语法更紧凑。但是define() 只能在 PHP $GLOBALS 或使用 PHP >=7.0。

    // Storing a single value works fine with define
    define( 'ROOT_DIR', dirname(dirname(__FILE__)) . '/' );
    
    // But not for complex data types like this array
    $USERPIC_PARAMS = array(
                "user_root"       => "images/users",
                "padding_length"    => 8,
                "split_length"      => 4,
                "hash_length"         => 12,
                "hide_leftover"     => false
        );
    
    // Then you need $GLOBALS
    $GLOBALS['USERPIC_PARAMS']  = $USERPIC_PARAMS;
    // Or in PHP >=7.0
    define( 'USERPIC_PARAMS', $USERPIC_PARAMS );
    
    // output your define
    echo ROOT_DIR;
    // output your $GLOBALS var
    echo $GLOBALS['USERPIC_PARAMS'];
    // output in PHP >=7.0 your constant
    echo USERPIC_PARAMS;
    

    【讨论】:

      【解决方案3】:

      当你想跨 PHP 文件使用全局常量时,我​​觉得一个好的做法是使用面向对象的原则并在相关类中定义这些。使用 PHP 内置的 spl_autoload_register() 函数,您可以定义所有以后的类来扩展相关的“全局类”,而不必担心在任何地方手动包含文件。该全局类的所有后续子类将始终可以访问相关的全局变量。 (我说相关是因为让一个类中的全局常量以某种方式相关是一种很好的设计,而不是所有东西都没有押韵或理由地组合在一起)

      【讨论】:

        【解决方案4】:

        更好的方法是检查常量是否被分配给任何东西,如果它没有被分配给任何东西然后分配它,否则将它分配给 NULL 然后将它分配给你的常量

        defined("FOO") ? null : define("FOO", "BAR");
        

        【讨论】:

          【解决方案5】:

          检查一下

          <?php
          //Global scope variables
          $a = 1;
          $b = 2;
          
           function Sum()
           {
          global $a, $b;
          
          $b = $a + $b;
           } 
          
          Sum();
          echo $b;
          ?>
          

          【讨论】:

            【解决方案6】:

            无论您在哪个文件中创建常量,您都必须在将使用它们的文件中要求/包含它。

            否则,您可以使用 $_SESSION 全局变量,但这需要在每个文件的代码开头由session_start() 进行会话初始化。

            【讨论】:

              【解决方案7】:

              执行以下操作:

              define("CONSTANT_NAME","value");
              

              如果你想从其他 php 文件中访问这个常量,你必须包含它:

              include_once("thefilewiththeconstant.php");
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2011-06-05
                • 1970-01-01
                • 2018-02-01
                • 1970-01-01
                • 2010-10-12
                • 2014-01-27
                • 1970-01-01
                相关资源
                最近更新 更多