Строки ключа массива PHP без кавычек - PullRequest
2 голосов
/ 15 сентября 2011

Я перемещаю файлы на сервер и использую переменные, такие как $ _GET [mode] без '' (одинарные кавычки) в 'mode'. Он работает отлично локально, но на сервере я получаю уведомления .. Как я могу это преодолеть? Вот мой файл phpinfo phpinfo Есть ли способ, которым мы можем иметь такое же поведение, чтобы работать и на сервере?

Ответы [ 2 ]

9 голосов
/ 15 сентября 2011

Как вы можете преодолеть E_NOTICE s, которые жалуются, что вы забыли кавычки вокруг ваших строк?

Добавить кавычки вокруг ваших строк.

$_GET['mode']

Также это звучит какуровень error_reporting на вашем локальном сервере недостаточен .Он должен быть высоким, чтобы вы видели ошибки такого рода при разработке своего веб-сайта / приложения.

На вашем рабочем сервере оно может быть ниже.

6 голосов
/ 15 сентября 2011

Цитирование Руководства PHP по массивам:

Почему $ foo [bar] не так?

Всегда используйте кавычки вокруг индекса строкового литерала. Например, $foo['bar'] - это правильно, а $foo[bar] - нет. Но почему? В старых сценариях встречается такой синтаксис:

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

Это неправильно, но работает. Причина в том, что этот код имеет неопределенную константу (bar), а не строку ('bar' - обратите внимание на кавычки). В будущем PHP может определять константы, которые, к сожалению, для такого кода, имеют одинаковые имена. Это работает, потому что PHP автоматически преобразует пустую строку (строку без кавычек, которая не соответствует ни одному известному символу) в строку, которая содержит пустую строку. Например, если нет определенной константы с именем bar, PHP подставит в строку 'bar' и будет использовать ее.

Итак, другими словами: mode - неопределенная константа.

Цитировать Руководство по PHP для констант :

Если вы используете неопределенную константу, PHP предполагает, что вы подразумеваете имя самой константы, как если бы вы называли ее как строку (CONSTANT vs "CONSTANT"). ошибка уровня E_NOTICE будет выдана, когда это произойдет. См. Также ручной ввод для , почему $foo[bar] является неправильным (если вы не указали define() бар как константу). Если вы просто хотите проверить, установлена ​​ли постоянная, используйте функцию defined().

Решение: заключите в кавычки ключ.

...