Учебник РНР
Назад Глава 7. Переменные Вперёд

Переменные вне PHP

HTML-формы (GET и POST)

Когда форма отправляется в PHP-скрипт, любые переменные этой формы автоматически делаются доступными скрипту PHP. Если опция конфигурации track_vars включена/on, то эти переменные будут находиться в ассоциативных массивах $_POST, $_GET и/или $_FILES, в соответствии с источником переменной в вопросе.

Дополнительно об этих переменных см. Предопределённые переменные.

Пример 7-1. Простая переменная формы
 
<form action="foo.php" method="post">
    Name: <input type="text" name="username"><br>
    <input type="submit">
</form>

Когда такая форма отправляется на сервер, значение из поля ввода text будет доступно в $_POST['username']. Если директива конфигурации register_globals включена/on, то эта переменная будет также доступна как $username в глобальной области видимости.

Примечание: Директива конфигурации magic_quotes_gpc действует на значения Get, Post и Cookie. Если она включена, значение (It's "PHP!") автоматически становится (It\'s \"PHP!\"). Необходимо еscap-ирование для вставки БД. См. также addslashes(), stripslashes() и magic_quotes_sybase.

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

Пример 7-2. Более сложные переменные формы
 
<form action="array.php" method="post">
    Name: <input type="text" name="personal[name]"><br>
    Email: <input type="text" name="personal[email]"><br>
    Beer: <br>
    <select multiple name="beer[]">
        <option value="warthog">Warthog
        <option value="guinness">Guinness
        <option value="stuttgarter">Stuttgarter Schwabenbrдu
        </select>
    <input type="submit">
</form>

В PHP 3 использование переменной массива формы ограничено одномерными массивами. В PHP 4 таких ограничений нет.

Имена переменных при отправке изображения

При отправке формы возможно использование изображения/image вместо стандартной кнопки submit с помощью тэга такого вида:

<input type="image" src="image.gif" name="sub">

Когда пользователь щёлкает в каком-либо месте изображения, соответствующая форма передаётся на сервер с двумя дополнительными переменными: sub_x и sub_y. они содержать координаты щелчка. Опытные программисты могут заметить, что фактические имена переменных, отправляемые браузером, содержат точку, а не символ подчёркивания, но PHP конвертирует точку в символ подчёркивания автоматически.

Куки HTTP

PHP прозрачно поддерживает куки HTTP, как определено в Netscape's Spec. Куки это механизм хранения данных на удалённом браузере и отслеживания или идентификации с их помощью ответов пользователя. Вы можете устанавливать куки функцией setcookie(). Куки являются частью HTTP-шапки/header, поэтому функция SetCookie обязана вызываться до любого вывода, высылаемого браузеру. Это такое же ограничение, как и для функции header(). Любые куки, высылаемые вам с этого клиента, автоматически конвертируются в PHP-переменную точно так же, как и GET и POST-данные.

Если вы хотите присвоить несколько значений одной куке, просто добавьте [] в имя куки. Например:

setcookie("MyCookie[]", "Testing", time()+3600);

Обратите внимание, что эта кука,cookie замещает предыдущую куку с тем же именем, если только path или domain не отличаются. Так, для приложения shopping cart вы можете захотеть сохранить счётчик/counter и передать его. То есть:

Пример 7-3. SetCookie
 
$Count++;
setcookie("Count", $Count, time()+3600);
setcookie("Cart[$Count]", $item, time()+3600);

Переменные окружения

PHP автоматически делает переменные окружения доступными как нормальные переменные PHP.
echo $HOME;  /* Показывает переменную окружения HOME, если она установлена. */

Поскольку информация, приходящая через механизмы GET, POST и Cookie, также автоматически создаёт переменные PHP, иногда бывает лучше явно считывать переменную из окружения, чтобы гарантировать получение правильной версии. Функция getenv() может использоваться для этого. Вы можете также установить переменную окружения функцией putenv().

Точки в именах входящих переменных

Обычно PHP не изменяет имена переменных при передаче их скрипту. Однако нужно отметить, что точка (dot, period, full stop) не является правильным символом в имени PHP-переменной. Посмотрим на такое имя:
$varname.ext;  /* неправильное имя переменной */

Разборщик видит теперь имя переменной $varname, за которым идёт операция конкатенации строк, а затем идёт голая строка (т.е. строка без кавычек, которая не совпадает ни с одним известным ключевым или зарезервированным словом) 'ext'. Очевидно, это не тот результат, который ожидался.

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

Определение типов переменных

Поскольку PHP определяет типы переменных и конвертирует их (обычно) так, как нужно, не всегда бывает очевидно, какой тип имеет данная переменная в данное время. PHP имеет несколько функций, которые определяют тип переменной. Это gettype(), is_array(), is_float(), is_int(), is_object() и is_string().


Назад Оглавление Вперёд
Переменные имена переменных ВверхКонстанты