Php 使用$GLOBALS定义常量
我想使用一个全局变量设置,它们都在PHP中声明、初始化并使用友好的语法,所以我想到了这个想法:Php 使用$GLOBALS定义常量,php,variables,global,Php,Variables,Global,我想使用一个全局变量设置,它们都在PHP中声明、初始化并使用友好的语法,所以我想到了这个想法: <? error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); $GLOBALS['debugger'] = 1; // set $GLOBALS['debugger'] to 1 DEFINE('DEBUGGER','$GLOBALS["debugger"]'); // f
<?
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
$GLOBALS['debugger'] = 1; // set $GLOBALS['debugger'] to 1
DEFINE('DEBUGGER','$GLOBALS["debugger"]'); // friendly access to it globally
echo "1:" . DEBUGGER . ":<br>";
echo "2:" . ${DEBUGGER}. ":<br>";
echo "3:" . $GLOBALS['debugger'] . ":<br>";
if (DEBUGGER==1) {echo "DEBUG SET";}
?>
我想你的常数可能有点交叉
DEFINE('DEBUGGER','$GLOBALS[“DEBUGGER”]”)代码>将常量调试器设置为字符串$GLOBALS[“调试器”]
请注意,这既不是值也不是引用,只是一个字符串
导致这些结果的原因是:
1:输出字符串$GLOBALS[“调试器”]
2:输出名为$GLOBALS[“调试器”]
的变量的值。请注意,这是名为“$GLOBALS[“debugger”]
”的变量,而不是数组$GLOBALS
中键“debugger”的值。因此会出现警告,因为该变量未定义。
3:输出$GLOBALS[“调试器”]
希望这一切都有意义。免责声明:我同意这些评论,全球化通常是个坏主意
这就是说,这里有几个问题值得回答,而间接的概念是有用的,所以这里开始
${'$GLOBALS[“调试器”]}
未定义。使用间接寻址时,不包括前导的“$”
。因此,正确的版本应该是define('DEBUGGER','GLOBALS[“DEBUGGER”])
但是,这也不起作用。您只能通过间接方式访问一个级别。因此,您可以访问数组$GLOBALS
,但无法访问该数组中的键。因此,您可以使用:
define('DEBUGGER', 'debugger');
${DEBUGGER};
实际上,这没有用。您也可以直接使用$debugger
,因为它被定义为全局的,并且在任何地方都可用。您可能需要定义global$debugger但是,在函数的开头使用code>
if语句没有引起注意的原因是您将DEBUGGER
定义为字符串。由于您根本不想在该行中使用间接寻址,因此它最终会显示为:
if ("$GLOBALS['debugger']"==1) {echo "DEBUG SET";}
尽管这是完全有效的PHP代码,但这显然是不正确的。如果您打算在数组或方法中使用“变量”,则不能对任何超全局数组(其中$GLOBALS是其中之一)使用“变量”。要获得该行为,您必须使用$$,但这不会像我提到的那样起作用
php中的常量已经是全局的,所以我不知道这会从您的示例中为您带来什么,也不知道您的目的是什么
上一次比较“有效”,因为您正在将常量设置为字符串,并且可以使用PHP的类型转换将字符串与整数进行比较。当然,它的计算结果是错误的,这可能会让您感到惊讶,因为您希望它实际工作。好的,感谢所有回答的人。我想现在我知道了,我是PHP新手,从C++背景开始,正在处理C++之类的定义,定义< <代码>,假设它在预编译/运行阶段做了一个字符串替换。
在precis中,我只想使用
DEBUGGER = 1;
而不是
$GLOBALS['debugger'] = 1;
有很多正当的理由;其中最重要的一点是防止简单的打字错误把你搞砸。唉,看来这在PHP中是不可行的。
谢谢你的帮助,谢谢。建议:停止。不要这样做。忘了环球吧。说真的。你不应该使用globals,因为globals并不好。事实上,我不知道其他的超globals,但当我为自己的答案运行一些测试时,以下方法确实奏效了:$foo='globals';变量转储(${$foo})代码>。你只是不能索引到数组中,所以它有点没用。@Matthew:是的,那会起作用,但在函数或方法中不行。这是一个非常严重的限制,我对它的使用大打折扣,但我应该更清楚一点。常量在php中已经是全局的了。您只需要使用DEFINE('DEBUGGER',1);