PHP数组键字符串没有引号

时间:2011-09-15 13:25:07

标签: php superglobals

我正在将文件移动到服务器,并在“模式”中使用$ _GET [mode]等变量而没有''(单引号)。它在本地完美运行,但在服务器上我收到通知..我怎么能克服这个?这是我的phpinfo文件 phpinfo 我们有什么方法可以在服务器上使用相同的行为吗?

2 个答案:

答案 0 :(得分:9)

你怎么能克服那些抱怨你在字符串周围忘记引号的E_NOTICE

在字符串周围添加引号。

$_GET['mode']

听起来本地服务器上的error_reporting级别还不够。它应该很高,以便您在开发网站/应用程序时看到这些错误。

在您的生产服务器上,它可能会设置得更低。

答案 1 :(得分:6)

引用PHP Manual on Arrays:

  

为什么$ foo [bar]错了?

     

始终在字符串文字数组索引周围使用引号。例如,$foo['bar']是正确的,而$foo[bar]则不正确。但为什么?在旧脚本中遇到这种语法是很常见的:

<?php
$foo[bar] = 'enemy';
echo $foo[bar];
// etc
?>
  

这是错误的,但它确实有效。原因是此代码具有未定义的常量(bar)而不是字符串('bar' - 注意引号)。 PHP可能在将来定义常量,不幸的是,这些代码具有相同的名称。它的工作原理是因为PHP自动将一个裸字符串(一个与任何已知符号不对应的不带引号的字符串)转换为包含裸字符串的字符串。例如,如果没有名为bar的已定义常量,则PHP将替换字符串'bar'并使用它。

因此,换句话说:mode是一个未定义的常量。

引用PHP Manual on Constants

  

如果使用未定义的常量,PHP假定您指的是常量本身的名称,就像您将其称为字符串一样(CONSTANT vs“CONSTANT”)。发生这种情况时,将发出error of level E_NOTICE。另请参阅why $foo[bar] is wrong上的手动输入(除非您首先define()栏为常量)。如果您只想检查是否设置了常量,请使用defined()功能。

解决方案:在密钥周围加上引号。