28

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

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

4

7 回答 7

29

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

!defined('MY_CONST') && define('MY_CONST', 'hello');
于 2012-05-21T19:33:46.513 回答
10

请执行下列操作:

define("CONSTANT_NAME","value");

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

include_once("thefilewiththeconstant.php");
于 2012-05-21T19:34:21.563 回答
3

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

于 2016-08-30T05:28:02.933 回答
1

检查这个

<?php
//Global scope variables
$a = 1;
$b = 2;

 function Sum()
 {
global $a, $b;

$b = $a + $b;
 } 

Sum();
echo $b;
?>
于 2012-05-21T19:42:22.203 回答
1

这取决于。在您的情况下,我会选择它,define()因为它的使用语法更紧凑。但是define()只能在 PHP < 7.0 中保存标量值 如果您需要一个关联数组,那么您别无选择,然后选择$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;
于 2017-04-23T19:52:17.377 回答
0

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

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

于 2012-05-21T19:38:39.460 回答
0

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

defined("FOO") ? null : define("FOO", "BAR");
于 2016-04-15T17:47:09.987 回答