PHP: использование пробелов в индексах ассоциативных массивов - PullRequest
17 голосов
/ 05 января 2010

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

$_SESSION['stuff to keep']

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

Ответы [ 4 ]

18 голосов
/ 05 января 2010

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

// 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 больше не будут работать, но вы не должны делать это в любом случае со своим сеансом.

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

8 голосов
/ 05 января 2010

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

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

3 голосов
/ 05 января 2010

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

0 голосов
/ 05 января 2010

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

...