Есть ли другой способ назначить переменные PHP, о которых я не знаю? - PullRequest
1 голос
/ 21 февраля 2012

Я отлаживаю некоторый клиентский PHP-код, который поставил меня в тупик.Как иллюстрирует этот псевдо-пример, на принимающей стороне отправки формы есть код, который обрабатывает значения формы, но при этом явно не присваивает эти значения:

(при отправке формы, где форма имеет поля 'name'и 'position'):

echo "The name is = ". $name;
echo "The position is = ". $position;

Этот код является частью большого приложения, и перед этим вызывается код из других файлов.НО решающий момент заключается в том, что если я буду искать '$ name =' по всей базе кода, он никогда не появится.Как тогда возможно, что переменная запроса будет присвоена $name?Есть ли другой способ присвоить значение переменной в PHP , отличной от , отличной от $var = value ??

Единственное, что я могу сделать, это то, что в этом проекте используется Smarty, о котором я ничего не знаю.

Ответы [ 8 ]

5 голосов
/ 21 февраля 2012

Если директива register_globals была установлена ​​в true в php.ini, то все атрибуты POST также будут отображаться как отдельные переменные, как вы описываете.Обратите внимание, что по умолчанию эта директива является ложной, и использование этой директивы не рекомендуется.

5 голосов
/ 21 февраля 2012

Может быть, человек, создавший код, работал на сервере с register_globals .Например, это создает регулярные глобальные переменные в результате отправки формы, а не заполнения массивов $ _POST или $ _GET.

3 голосов
/ 22 февраля 2012

Технически да, есть.

$x = 'name';
$$x = 'harry';
echo 'Yer a wizard '.$name;

(я был бы удивлен, если бы это было причиной)

3 голосов
/ 22 февраля 2012

Если вы посмотрите документацию smarty , вы увидите, что переменные назначаются следующим образом (скопировано со связанной страницы):

<?php

$smarty = new Smarty();

$smarty->assign('firstname', 'Doug');
$smarty->assign('lastname', 'Evans');
$smarty->assign('meetingPlace', 'New York');

$smarty->display('index.tpl');

?>
2 голосов
/ 22 февраля 2012

Может быть, это очередная вспышка болезни register_globals?

Считается, что он вымер, но появляется снова и снова!

2 голосов
/ 21 февраля 2012

Я полагаю, на вашем сервере включена настройка register_globals, которая автоматически генерирует переменные из размещенных элементов:

$_POST['foo'] === $foo
1 голос
/ 21 февраля 2012

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

1 голос
/ 21 февраля 2012

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

...