首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用$GLOBALS定义常数

用$GLOBALS定义常数
EN

Stack Overflow用户
提问于 2012-05-08 04:36:49
回答 4查看 314关注 0票数 0

我想要使用全局变量设置,其中所有变量都是在PHP中声明、初始化和使用友好语法的,所以我想出了这样的想法:

代码语言:javascript
复制
<?
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";}
?>

生成以下内容:

1:$GLOBALS“调试器”:

注意:未定义变量:第8行中/home/tra50118/public_html/php/test.php中的$GLOBALS“调试器”

2:

3:1:

在明确定义$GLOBALS["debugger"]时,如何使用2:出现错误?而不是用第10行的测试产生类似的通知?

我想我要做的是迫使PHP在运行时将字符串($GLOBALS["debugger"])解释为变量,即常量变量。

EN

回答 4

Stack Overflow用户

发布于 2012-05-08 05:02:33

免责声明:我同意这些评论,全球化通常是个坏主意。

尽管如此,这里有几个值得回答的问题,间接的概念是有用的,下面就是这样。

${'$GLOBALS["debugger"]'}是未定义的。在使用间接时,不包括领先的'$'。因此,正确的版本将是define('DEBUGGER', 'GLOBALS["debugger"]')

但是,这也不起作用。您只能通过间接访问一个级别。所以您可以访问数组$GLOBALS,但不能访问该数组中的键。因此,您可以使用:

代码语言:javascript
复制
define('DEBUGGER', 'debugger');
${DEBUGGER};

这实际上是没用的。您可以直接使用$debugger,因为它被定义为全局的,并且在任何地方都可以使用。但是,您可能需要在函数开始时定义global $debugger;

if语句之所以没有引起注意,是因为您将DEBUGGER定义为字符串。因为您根本没有试图在这一行中使用间接,所以它最终会读到:

代码语言:javascript
复制
if ("$GLOBALS['debugger']"==1) {echo "DEBUG SET";}

这显然不是真的,尽管它是完全有效的PHP代码。

票数 1
EN

Stack Overflow用户

发布于 2012-05-08 04:55:49

我想你的常量可能有点交叉了。

DEFINE('DEBUGGER','$GLOBALS["debugger"]');将常量DEBUGGER设置为字符串$GLOBALS["debugger"]

注意,这既不是值,也不是引用,只是一个字符串。

这导致了以下结果:

1:输出字符串$GLOBALS["debugger"]

2:输出名为$GLOBALS["debugger"]的变量的值。请注意,这是名为"$GLOBALS["debugger"]“的变量,而不是数组$GLOBALS中键”调试器“的值。因此会出现警告,因为该变量是未定义的。

3:输出$GLOBALS["debugger"]的实际值

希望这一切都有意义。

票数 0
EN

Stack Overflow用户

发布于 2012-05-08 05:09:48

如果要在数组或方法中使用“变量变量”,则不能使用任何超全局数组( $GLOBALS是其中之一)。要获得这种行为,您必须使用$$,但这不能像我前面提到的那样起作用。

php中的常量已经是全局的,所以我不知道这会从您的示例中买到什么,也不知道您要做什么。

上一次比较“有效”是因为您将常量设置为字符串,并且PHP的类型转换可以将字符串与整数进行比较。当然,它的计算值为false,这可能会让您感到惊讶,因为您期望它能够实际工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10492621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档