Коротко: переменную в PHP передают по-разному: из формы через $_GET и $_POST, между страницами — через $_SESSION, внутрь функции — как аргумент. Выбор зависит от того, куда и откуда передаётся значение.
Способы передачи
| Куда | Как |
|---|---|
| На страницу через адрес | $_GET |
| Из формы | $_POST |
| Между страницами | $_SESSION |
| В функцию | аргументы |
Через адрес и форму
php
// ссылка: page.php?id=42
$id = $_GET['id'] ?? 0;
// форма методом POST
$name = $_POST['name'] ?? '';
$name = trim($name); // очистка
$name = htmlspecialchars($name); // защита при выводеДанные из $_GET и $_POST всегда проверяют: они приходят от пользователя и им нельзя доверять.
Между страницами — сессии
php
session_start();
$_SESSION['user_id'] = 42; // сохранить
echo $_SESSION['user_id']; // прочитать на другой странице
unset($_SESSION['user_id']); // удалитьСессия хранит данные на сервере и доступна на всех страницах. Идеальна для авторизации и корзины. Не забывайте вызывать session_start() до вывода HTML.
Вкладки: передача в функцию
php
function hello($name) {
return "Привет, $name";
}
echo hello('Иван');Обычный способ: функция получает копию значения и не меняет исходную переменную.
php
function addOne(&$num) {
$num++;
}
$n = 5;
addOne($n); // $n теперь 6Знак & передаёт переменную по ссылке: изменения внутри функции видны снаружи. Используйте осторожно — это затрудняет чтение кода.
php
function greet($name = 'гость') {
return "Привет, $name";
}
echo greet(); // Привет, гостьЗначение по умолчанию делает аргумент необязательным. Полезно, когда большинство вызовов обходятся без параметра.
$_GET и $_POST напрямую в HTML или SQL — это путь к XSS и инъекциям. Проверяйте тип, очищайте значения и используйте подготовленные запросы.Практика: передать переменную
- Определите источник данных: адрес, форма, сессия.
- Для адреса —
$_GETс проверкой ключа. - Для формы —
$_POSTи очистка значений. - Между страницами —
$_SESSION. - В функцию — аргументы, при необходимости по ссылке.
- Проверьте данные через
var_dumpна этапе отладки.
Частые ошибки: причина → решение
| Симптом | Причина | Решение |
|---|---|---|
Undefined index |
ключа нет | ?? или isset |
| Сессия не работает | нет session_start() |
вызвать в начале скрипта |
| Значение не изменилось | передали по значению | передать по ссылке & |
| XSS на странице | вывод без очистки | htmlspecialchars |
| Данные пропали после перехода | использован $_POST |
применить сессию |
Проверьте себя
& в аргументе?
Вопросы и ответы
$_GET передаёт данные в адресе — их видно в строке браузера, удобно для ссылок. $_POST передаёт скрыто от адресной строки — подходит для форм и паролей.
Данные — на сервере, а браузер хранит только идентификатор сессии в cookie. Поэтому значения недоступны пользователю напрямую и переживают переходы по сайту.
Почти никогда. Передавайте значения аргументами — так код понятнее и предсказуемее. global оправдан редко и создаёт скрытые зависимости.
Так же, как обычную переменную: function f(array $items). Массивы передаются по значению, но копирование может быть затратным — для больших данных есть передача по ссылке.
Итоги
- Из адреса данные читают из
$_GET, из формы — из$_POST. - Между страницами значения хранят в
$_SESSION. - В функцию переменные передают аргументами.
- Все внешние данные проверяют и очищают.

Комментарии
Пока комментариев нет — будьте первым, кто поделится мнением.