PHP: использование пробелов в индексах ассоциативного массива

Является ли эта плохая практика/может вызвать проблемы?

$_SESSION['stuff to keep']

В отличие от вызова str_replace() по индексам.

Ответы

Ответ 1

Это плохая практика, но не из-за пространства.

// file foo.php
$_SESSION['stuff to keep'] = 42;

// file bar.php
if ($_SESSION['stufft o keep'] == 42) frobnicate();

Здесь ваш код бесшумно ошибочно, и ошибка может занять некоторое время. Хорошей практикой является использование PHP-принудительного имени, такого как константа класса:

$_SESSION[Stuff::TO_KEEP] = 42;

if($_SESSION[Stuff::TOO_KEEP] == 42) 
// error: no constant TOO_KEEP in class Stuff

Затем вы можете определить эту константу для любой константы, которую вы найдете интересной или читаемой, например "stuff to keep" (с пробелами). Конечно, extract() и отбрасывание на object больше не будет работать, но вы не должны делать это в любом случае со своей сессией.

Разрешение вводимого пользователем текста на ключи сеанса - это, конечно, явная ошибка безопасности.

Ответ 2

Вы можете это сделать, это сработает - и даже если я вообще этого не делаю, когда я устанавливаю ключи своих массивов "вручную", иногда это происходит, когда я получаю ключи из файла (для экземпляр), и у меня никогда не было проблем с этим.

Возможно, это может вызвать какую-то проблему, если вы используете функции extract. Если он создает переменные с пробелами в своих именах (не знаю, будет ли это), будет трудно (но не невозможно) получить доступ к вашим переменным.

Ответ 3

Это не вызовет проблемы, но ключи массива обычно считаются именами переменных, поэтому их следует выбирать с одинаковыми соображениями

Ответ 4

Похоже на добавление лишних пробелов на мой взгляд... Обычно я не использую пробелы. Если вы это сделаете, убедитесь, что вы указываете ключи массива.