定义全局常量的最佳方法是什么,即在PHP中的所有文件中都应该可用。
由于
更新:常量和类常量之间有什么区别,它们可以互换使用吗?
答案 0 :(得分:21)
在 top .php文件中定义常量,该常量将包含在所有其他脚本中。它可能是您的前端控制器,配置文件或为此单一目的而创建的文件。
!defined('MY_CONST') && define('MY_CONST', 'hello');
答案 1 :(得分:8)
执行以下操作:
define("CONSTANT_NAME","value");
如果你想从其他php文件访问这个常量,你必须包含它:
include_once("thefilewiththeconstant.php");
答案 2 :(得分:1)
检查这个
<?php
//Global scope variables
$a = 1;
$b = 2;
function Sum()
{
global $a, $b;
$b = $a + $b;
}
Sum();
echo $b;
?>
答案 3 :(得分:1)
当你想在PHP文件中使用全局常量时,我觉得一个好的做法是使用面向对象的原则并在相关的类中定义它们。使用PHP内置的spl_autoload_register()函数,您可以定义所有后续类以扩展相关的“全局类”,而无需担心在任何地方手动包含文件。该全局类的所有后续子类始终可以访问相关的全局变量。 (我说相关是因为将类中的全局常量以某种方式相关联而不是所有组合在一起而没有押韵或理由的设计是好的设计)
答案 4 :(得分:0)
无论您在哪个文件中创建常量,都必须要求/将其包含在您将使用它们的文件中。
否则,您可以使用$ _SESSION全局,但这需要在每个文件的代码开头session_start()
进行会话初始化。
答案 5 :(得分:0)
更好的方法是检查常量是否分配给任何东西,如果它没有分配给任何东西然后分配它,否则将它分配给NULL然后将它分配给你的常量
SELECT *
FROM a
JOIN b
USING (bid)
LEFT JOIN
с
USING (cid)
JOIN d
ON d.did = COALESCE(c.did, b.did)
JOIN e
USING (eid)
WHERE e.name LIKE '%home%'
答案 6 :(得分:0)
这取决于。在你的情况下,我会选择define()
,因为它的使用语法更为紧凑。但是define()
只能在PHP中保存标量值&lt; 7.0如果你需要一个关联数组,你没有其他选择,那么去$GLOBALS
或使用PHP&gt; = 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;