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

问题描述 投票:0回答:8

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

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

php variables global-variables constants
8个回答
34
投票

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

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

12
投票

执行以下操作:

define("CONSTANT_NAME","value");

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

include_once("thefilewiththeconstant.php");

4
投票

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


1
投票

检查这个

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

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

$b = $a + $b;
 } 

Sum();
echo $b;
?>

1
投票

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

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

1
投票

这要看情况。在你的情况下,我会选择

define()
,因为它在使用中具有更紧凑的语法。但是
define()
只能在 PHP < 7.0 In case you need i.e. an associative array you have no other choice then to go for
$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;

0
投票

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

否则,您可以使用 $_SESSION 全局变量,但这需要在每个文件的代码开头通过

session_start()
进行会话初始化。


0
投票
defined("FOO") ?? define("FOO", "BAR");

最快最短的路线:

© www.soinside.com 2019 - 2024. All rights reserved.