PHP数组键字符串没有引号

Jun*_*une 2 php superglobals

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

Lig*_*ica 9

你怎么能克服E_NOTICE那些抱怨你忘了你的字符串引号?

在字符串周围添加引号.

$_GET['mode']
Run Code Online (Sandbox Code Playgroud)

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

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


Gor*_*don 6

引用数组上PHP手册:

为什么$ foo [bar]错了?

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

<?php
$foo[bar] = 'enemy';
echo $foo[bar];
// etc
?>
Run Code Online (Sandbox Code Playgroud)

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

所以,换句话说:mode是一个未定义的常量.

引用常量PHP手册:

如果使用未定义的常量,PHP假定您指的是常量本身的名称,就像您将其称为字符串一样(CONSTANT vs"CONSTANT").一个级别的错误E_NOTICE发生这种情况时会发出.另请参阅手册输入,了解为什么$foo[bar]错误(除非您先将define()条形图作为常量).如果您只想检查是否设置了常量,请使用该defined()功能.

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