Использование глобальных переменных в PHP / PHP / WMDN
Как-то я заинтересовался вопросом использования глобальных переменных в PHP-скриптах. В результате нашел статью (Using globals in PHP с PHPit.net), хорошо освещающую этот вопрос. Ниже ее вольный перевод.
Краткое содержание
В этой статье я покажу вам как правильно использовать глобальные переменные в PHP. Мы рассмотрим глобальные ключевые слова, аргументы функций и паттерны проектирования Singleton и Registry.
Введение
Всякий раз когда вы разрабатываете масштабный PHP-скрипт вам приходится использовать глобальные переменные, с того времени как вам понадобится использовать некоторые данные в разных частях вашего скрипта. Хорошими примерами таких данных являются: настройки скрипта, параметры соединения с базой данных, идентификатор юзера и другие. Есть много путей сделать эту информацию глобальной (с точки зрения доступности), но чаще всего используется метод с использованием ключевого слова global, который мы рассмотрим позже в этой статье.
Есть одна проблема при использовании ключевого слова global которая является плохим примером программирования и может привести к проблемам впоследствии. Она заключается в том, что все отдельные части скрипта связываеются в таком методе воедино и часто если вы делаете изменения в одной части что-то ломается в другой. Если вы используете больше чем несколько штук глобальных переменных ваш код со временем станет очень сложно-поддерживаемым.
Цель этой статьи показать вам как предотваратить эти сложности с использованием разных техник и паттернов проектирования. Для начала давайте взглянем на ключевое слово global и на принцип его работы.
Использование глобальных переменных и ключевое слово globals
По умолчанию PHP объявляет несколько переменных называемых суперглобальными которые становятся глобальными автоматически и доступны для использования из любого места скрипта, например суперглобальные массивы $_GET or $_REQUEST. Они главным образом используются для получения данных из форм и других внешних данных, и вреда от их использования нет, так как в них ничего не записывается по умполчанию.
Но вы можете использовать и собственные глобальные переменные с ключевым словом global, которое используется для импорта переменных из глобальной области видимости в локальную область видимости функции. Если вы не знаете что я имею ввиду под областью видимости, посмотрите документацию, раздел PHP Variable Scope documentation.
Следующий пример показывает использование ключевого слова global:
<?php $my_var = 'Hello World'; test_global(); function test_global() { // Здесь, в локальной области видимости // функции переменная $my_var не существует // Вызовет ошибку: "Undefined variable: my_var" echo $my_var; // Теперь давайте импортируем переменную global $my_var; // Теперь работает: echo $my_var; } ?> |
Как вы видите в примере, ключевое слово global используется для импорта переменной из глобальной области видимости. Выглядит красиво и просто, почему же вы должны волноваться о использовании ключевого слова keyword?
Есть три хороших причины:
1. Использовать повторно часть скрипта невозможно.
Если определенная функция зависит от глобальной переменной, становится невозможным ее использование в другом контексте. Также невозможно будет использовать эту функцию в другом скрипте.
2. Усложняется поиск ошибок
Отслеживание глобальных переменных намного сложнее локальных. Глобальная переменная может быть объявлена в подключаемом файле, на поиски которого можно потратить несколько часов, хотя хороший редактор кода / IDE помогут сделать это быстрее.
Сложно понять где была объявлена пользовательская глобальная переменная и что она делает. Вы можете знать все о каждой вашей глобальной переменной в процессе разработки, но через год вы вероятно забудете о половине из них, и будете укорять себя за использование такого их количества.
Итак если мы не можем использовать ключевое слово global, что же нам использовать? Давайте рассморим нескольно решений.
Использование аргументов функций
Один путь перестать использовать ключевое слово global это передача значений в аргументы функции, например:
<?php $var = 'Hello World'; test ($var); function test($var) { echo $var; } ?> |
Например, давайте представим что мы используем объект базы данных, объект настроек и объект пользователя.
Эти три объекта используются всеми компонентами нашего скрипта, следовательно поэтому должны быть переданы в каждый компонент. Если для этого мы будем использовать аргументы функции, то получим что-то вроде этого:
<?php $db = new DBConnection; $settings = new Settings_XML; $user = new User; test($db, $settings, $user); function test(&$db, &$settings, &$user) { // Блок действий } ?> |
Очевидно, что в реальности это не работает, и как только у нас появится новый объект нам придется добавить новый аргумент функции.
Мы пойдем другим путем решения этой проблемы.Использование паттерна проектирования Singleton
Один из путей решения проблемы – это использование Singleton-ов вместо аргументов функций. Singleton-ы специальный тип объекта котороый может быть проинициализирован только один раз, и включает статическую функцию для возврата экземпляра объекта. Пример ниже показывает простой Singleton:
<?php // Берем экземпляр объекта DBConnection $db =& DBConnection::getInstance(); // Устанавливаем свойство user объекта $db->user = 'sa'; // Устанавливаем вторую переменную (ссылающуюся на тот же экземпляр объекта) $second =& DBConnection::getInstance(); // Должно напечатать 'sa' echo $second->user; Class DBConnection { var $user; function &getInstance() { static $me; if (is_object($me) == true) { return $me; } $me = new DBConnection; return $me; } function connect() { // TODO } function query() { // TODO } } ?> |
Одной из важных частей примера является функция getInstance(). Эта функция позволяет создать (и вернуть) только один экземпляр объекта класса DBConnection, используя статическую переменную $me (прим пер.: Example #5 Example use of static variables http://php.net/manual/en/language.variables.scope.php).
Преимущество использования Singleton-а в том что нам не надо явно передавать объект, т.к. его можно получить вызовом функции getInstance(), например:
<?php function test() { $db = DBConnection::getInstance(); // Делаем что-то с объектом } ?> |
Есть и недостатки такого использования Singleton-ов. Во-первых, мы не можем использовать несколько объектов одного класса (отсюда название singletons). Во-вторых, singleton-ы невозможно протестировать с помощью модульного тестирования. Это практически невозможно, если не использовать некоторые хаки, которые использовать не хочется. Вот почему singleton-ы не являеются магическим решением проблемы, которое мы ищем.
Паттерн Registry
Лучший путь сделать некоторый объект доступным во всех компонентах вашего скрипта это использование центральнольного «связываещего» объекта, который свяжет все наши объекты. Этот связывающий объект официально называется Registry и одновременно является чрезвычайно гибким и простым.
Простой объект класса Registry выглядит так:
<?php Class Registry { var $_objects = array(); function set($name, &$object) { $this->_objects[$name] =& $object; } function &get($name) { return $this->_objects[$name]; } } ?> |
Первый шаг использования класса Registry является регистрация объектов с использованием метода set():
<?php $db = new DBConnection; $settings = new Settings_XML; $user = new User; // Регистрируем объекты, созданные выше $registry =& new Registry; $registry->set ('db', $db); $registry->set ('settings', $settings); $registry->set ('user', $user); ?> |
Теперь в объекте(массиве) класса Registry содержатся все наши пользовательские объекты. Теперь мы можем подать этот один объект на функцию, вместо трех пользовательских, например так:
<?php function test(&$registry) { $db =& $registry->get('db'); $settings =& $registry->get('settings'); $user =& $registry->get('user'); // Какие-то действия с объектами } ?> |
И что еще лучше нам не надо менять что-либо если мы добавляем свой новый объект в наш скрипт. Нам потребуется всего лишь зарегистрировать его в методом класса Registry и он незамедлительно станет доступен всем компонентам.
Чтобы упростить использование класса Registry, модифицируем его в singleton, так как объект класса Registry в нашем скрипте должен быть только один. Добавим следующий метод в класс Registry:
function &getInstance() { static $me; if (is_object($me) == true) { return $me; } $me = new Registry; return $me; } |
Теперь используем класс Registry как Singleton:
<?php $db = new DBConnection; $settings = new Settings_XML; $user = new User; // Регистрируем наши объекты $registry =& Registry::getInstance(); $registry->set ('db', $db); $registry->set ('settings', $settings); $registry->set ('user', $user); function test() { $registry =& Registry::getInstance(); $db =& $registry->get('db'); $settings =& $registry->get('settings'); $user =& $registry->get('user'); // Какие-то действия с объектами } ?> |
Как вы видите мы не передаем чего-либо параметром в функцию по ссылке, и мы не больше не использум ключевое слово global. Паттерн Registry это идеальное решение этой проблемы и при этом очень гибкое.
Класс-обертка Request
Хотя наш класс Registry делает излишним использование глобальных ключевых слов, в нашем скрипте все еще остается один тип глобальных переменных: Суперглобальные массивы, такие как $_POST и $_GET. Хотя эти переменные стандартные и их использование не имеет особого значения для вас, в некоторых случаях вам возможно захочется использовать класс Registry и для них.
Простым решением этой задачи является небольшой класс который будет осуществлять доступ к этим переменным, который часто называют запрос-обертка, и выглядит примерно так:
<?php Class Request { var $_request = array(); function Request() { // Получаем глобальную переменную $this->_request = $_REQUEST; } function get($name) { return $this->_request[$name]; } } ?> |
Это простой пример, в реальной ситуации вы можете с его помощью сделать намного больше (например, автоматически фильтровать данные, устанавливать значения по умолчанию и прочее).
Пример использования класса Request:
<?php $request = new Request; // Register object $registry =& Registry::getInstance(); $registry->set ('request', &$request); test(); function test() { $registry =& Registry::getInstance(); $request =& $registry->get ('request'); // Выведет строку 'name', в обычной ситуации это $_GET['name'] echo htmlentities($request->get('name')); } ?> |
Как вы видите мы больше не используем ключевое слово global и освободили функции от всех глобальных переменных.
Заключение
В этой статье я показал вам как избавить ваш скрипт от глобальных переменных, заменив их явное использование передачей в функции объектов и переменных по ссылке с помощью паттерна Registry, который является весьма гибким инструментом, который предотвратит логический распорядок.
В итоге я рекомендую вам использовать передачу объекта класса registry как аргумент функции, хотя использования Singleton по началу приводит к снижению объема работ в будущем это может привести к сложностям при понимании кода.
Источник: http://www.phpit.net/article/using-globals-php/
Смотрите также:
Php глобальные переменные server — Вэб-шпаргалка для интернет предпринимателей!
(PHP 4 >= 4.1.0, PHP 5, PHP 7)
$_SERVER — $HTTP_SERVER_VARS [удалено] — Информация о сервере и среде исполнения
Описание
Переменная $_SERVER — это массив, содержащий информацию, такую как заголовки, пути и местоположения скриптов. Записи в этом массиве создаются веб-сервером. Нет гарантии, что каждый веб-сервер предоставит любую из них; сервер может опустить некоторые из них или предоставить другие, не указанные здесь. Тем не менее, многие эти переменные присутствуют в » спецификации CGI/1.1, так что вы можете их ожидать их реализации и в конкретном веб-сервере.
Переменная $HTTP_SERVER_VARS содержит ту же начальную информацию, но она не суперглобальная. (Заметьте, что $HTTP_SERVER_VARS и $_SERVER являются разными переменными, так что PHP обрабатывает их соответственно). Также учтите, что «длинные массивы» были удалены в версии PHP 5.4.0, поэтому $HTTP_SERVER_VARS больше не существует.
Индексы
Вы можете найти (а можете и не найти) любой из следующих элементов в массиве $_SERVER . Заметьте, что немногие элементы, если вообще такие найдутся, будут доступны (или действительно будут иметь значение), если PHP запущен в командной строке.
‘ PHP_SELF ‘ Имя файла скрипта, который сейчас выполняется, относительно корня документов. Например, $_SERVER[‘PHP_SELF’] в скрипте по адресу http://example.com/foo/bar.php будет /foo/bar.php . Константа __FILE__ содержит полный путь и имя файла текущего (то есть подключенного) файла. Если PHP запущен в командной строке, эта переменная содержит имя скрипта, начиная с PHP 4.3.0. Раньше она была недоступна. ‘argv’ Массив аргументов, переданных скрипту. Когда скрипт запущен в командой строке, это дает C-подобный доступ к параметрам командной строки. Когда вызывается через метод GET, этот массив будет содержать строку запроса. ‘argc’ Содержит количество параметров, переданных скрипту (если запуск произведен в командной строке). ‘ GATEWAY_INTERFACE ‘ Содержит используемую сервером версию спецификации CGI; к примеру’CGI/1.1‘. ‘ SERVER_ADDR ‘ IP адрес сервера, на котором выполняется текущий скрипт. ‘ SERVER_NAME ‘ Имя хоста, на котором выполняется текущий скрипт. Если скрипт выполняется на виртуальном хосте, здесь будет содержатся имя, определенное для этого виртуального хоста. ‘ SERVER_SOFTWARE ‘ Строка идентификации сервера, указанная в заголовках, когда происходит ответ на запрос. ‘ SERVER_PROTOCOL ‘ Имя и версия информационного протокола, через который была запрошена страница; к примеру ‘HTTP/1.0‘; ‘ REQUEST_METHOD ‘ Какой метод был использован для запроса страницы; к примеру ‘GET‘, ‘HEAD‘, ‘POST‘, ‘PUT‘.
PHP скрипт завершается после посылки заголовков (то есть после того, как осуществляет любой вывод без буферизации вывода), если запрос был осуществлен методом HEAD.
Замечание: Обратите внимание, что при использовании ISAPI с IIS значение будет off, если запрос не был произведен через протокол HTTPS.
Замечание: Ваш веб-сервер должен быть настроен, чтобы создавать эту переменную. Для примера, в Apache вам необходимо присутствие директивы HostnameLookups On в файле httpd.conf , чтобы эта переменная создавалась. См. также gethostbyaddr() .
Абсолютный путь к скрипту, который в данный момент исполняется.
Если скрипт запускается в командной строке (CLI), используя относительный путь, такой как file.php или ../file.php , переменная $_SERVER[‘SCRIPT_FILENAME’] будет содержать относительный путь, указанный пользователем.
‘ SERVER_ADMIN ‘ Эта переменная получает свое значение (для Apache) из директивы конфигурационного файла сервера. Если скрипт запущен на виртуальном хосте, это будет значение, определенное для данного виртуального хоста. ‘ SERVER_PORT ‘ Порт на компьютере сервера, используемый веб-сервером для соединения. Для установок по умолчанию, значение будет ‘80‘; используя SLL, например, это значение будет таким, какое сконфигурировано для соединений безопасного HTTP.
Замечание: Чтобы получить физический (реальный) порт в Apache 2, необходимо установить UseCanonicalName = On и UseCanonicalPhysicalPort = On, иначе это значение может быть подменено и не вернуть реальной значение физического порта. Полагаться на это значение небезопасно в контексте приложений, требующих усиленной безопасности.
Список изменений
Версия | Описание |
---|---|
5.4.0 | Массив $HTTP_SERVER_VARS больше не доступен в связи с удалением «длинных массивов». |
5.3.0 | Директива register_long_arrays, которая приводила к заполнению $HTTP_SERVER_VARS помечена как устаревшая. |
4.1.0 | Введена переменная $_SERVER вместо старой $HTTP_SERVER_VARS . |
Примеры
Пример #1 Пример использования $_SERVER
Результатом выполнения данного примера будет что-то подобное:
Примечания
Это ‘суперглобальная’ или автоматическая глобальная переменная. Это просто означает что она доступна во всех контекстах скрипта. Нет необходимости выполнять global $variable; для доступа к ней внутри метода или функции.
Суперглобальный массивы были введены в PHP 4.1.0 и являются встроенными переменные, которые всегда доступны во всех областях.
PHP Глобальные переменные — суперглобальный массив
Несколько предопределенных переменных в PHP «суперглобальные», что означает, что они всегда доступны, независимо от области — и Вы можете получить к ним доступ из любой функции, класса или файла без необходимости делать что-либо особенное.
PHP Суперглобальные переменные:
В этой главе будут описаны некоторые из суперглобальных массивах, а остальное будет объясняется в последующих главах.
PHP $GLOBALS
$GLOBALS — суперглобальная переменная PHP, которая используется для доступа к глобальным переменным из любого места в PHP скрипте (внутри функций или методах).
Все PHP глобальные переменные хранятся в массиве [index]. index содержит имя переменной.
В приведенном ниже примере показано, как использовать суперглобальную переменную $GLOBALS :
Пример
В приведенном выше примере, поскольку z является переменной, присутствующей в $GLOBALS как массив, он также доступен снаружи функции!
PHP $_SERVER
$_SERVER — суперглобальная переменная PHP, которая содержит сведения о заголовках, пути и расположения сценариев.
В приведенном ниже примере показано, как использовать некоторые из элементов в $_SERVER :
Пример
В следующей таблице перечислены наиболее важные элементы, которые могут находится внутри $_SERVER :
Элемент/Код | Описание |
---|---|
$_SERVER[‘PHP_SELF’] | Возвращает имя текущего выполняемого скрипта |
$_SERVER[‘GATEWAY_INTERFACE’] | Возвращает версию интерфейса общего шлюза (CGI) сервер с помощью |
$_SERVER[‘SERVER_ADDR’] | Возвращает IP-адрес хост-сервера |
$_SERVER[‘SERVER_NAME’] | Возвращает имя хост-сервера например,(www. schoolsw3.com) |
$_SERVER[‘SERVER_SOFTWARE’] | Возвращает строку идентификации сервера например,( Apache/2.2.24) |
$_SERVER[‘SERVER_PROTOCOL’] | Возвращает имя и Версию информационного протокола, например,( HTTP/1.1) |
$_SERVER[‘REQUEST_METHOD’] | Возвращает метод запроса, используемый для доступа к странице например,( POST) |
$_SERVER[‘REQUEST_TIME’] | Возвращает метку времени начала запроса например,( 1377687496) |
$_SERVER[‘QUERY_STRING’] | Возвращает строку запроса, если страница доступна через строку запроса |
$_SERVER[‘HTTP_ACCEPT’] | Возвращает заголовок Accept из текущего запроса |
$_SERVER[‘HTTP_ACCEPT_CHARSET’] | Возвращает заголовок Accept_Charset из текущего запроса например,( utf-8,ISO-8859-1) |
$_SERVER[‘HTTP_HOST’] | Возвращает заголовок узла из текущего запроса |
$_SERVER[‘HTTP_REFERER’] | Возвращает полный URL-адрес текущей страницы (не надежный, потому что не все пользовательские агенты поддерживают его) |
$_SERVER[‘HTTPS’] | Является ли скрипт запросом через безопасный протокол HTTP |
$_SERVER[‘REMOTE_ADDR’] | Возвращает IP-адрес, с которого пользователь просматривает текущую страницу |
$_SERVER[‘REMOTE_HOST’] | Возвращает имя хоста, с которого пользователь просматривает текущую страницу |
$_SERVER[‘REMOTE_PORT’] | Возвращает порт, используемый на компьютере пользователя для связи с веб-сервер |
$_SERVER[‘SCRIPT_FILENAME’] | Возвращает абсолютный путь текущего выполняемого сценария |
$_SERVER[‘SERVER_ADMIN’] | Возвращает значение, заданное директиве SERVER_ADMIN на веб-сервере файл конфигурации (если скрипт выполняется на виртуальном хосте, это будет значение определено для этого виртуального хоста) например,( someone@schoolsw3. com) |
$_SERVER[‘SERVER_PORT’] | Возвращает порт на серверном компьютере, используемом веб-сервером для связи например,(80) |
$_SERVER[‘SERVER_SIGNATURE’] | Возвращает версию сервера и имя виртуального хоста, которые добавляются к странице, созданные сервером |
$_SERVER[‘PATH_TRANSLATED’] | Возвращает путь на основе файловой системы к текущему сценарию |
$_SERVER[‘SCRIPT_NAME’] | Возвращает путь текущего сценария |
$_SERVER[‘SCRIPT_URI’] | Возвращает URI текущей страницы |
PHP $_REQUEST
PHP $_REQUEST используется для сбора данных после отправки HTML формы.
В примере ниже показана форма с полем ввода и кнопкой отправки. Когда пользователь отправляет данные, нажав кнопку «Submit» , данные формы отправляются в файл, указанный в атрибуте действия тега
Серверные переменные $_SERVER
Примечание: Впервые появилась в PHP версии 4. 1.0. В более ранних версиях используется переменная $HTTP_SERVER_VARS.
$_SERVER — это суперглобальный массив, содержащий такую информацию, как заголовки, пути, размещение скриптов. Данный массив создается веб-сервером. Нет никиких гарантий, что веб-сервер снабдит данный суперглобальный массив всей предопределенной информацией. За детельной информацией по переменным, содержащихся в данном суперглобальном массиве, обратитесь к спецификации CGI 1.1.
Суперглобальные переменные доступны внутри пользовательских функций. То есть вам не нужно объявлять суперглобальные переменные глобальными внутри пользовательских функций, делая что-то вроде этого: global $_SERVER . На это не влияют даже настойки конфигурации PHP (php.ini).
Переменная $HTTP_SERVER_VARS содержит ту же самую начальную информацию, но она не является автоглобальной переменной. (Заметьте, что $HTTP_SERVER_VARS и $_SERVER — это различные переменные).
Вы можете не найти некоторый переменные, которые могут содержаться в массиве $_SERVER, если вы запускаете PHP из коммандной строки.
PHP_SELF
Имя файла в настоящее время выполняющегося сценария, относительно корня документа. Например, $_SERVER [‘PHP_SELF’] в сценарии при адресе http://example.com/test.php/foo.bar возвращает /test.php/foo.bar . Предопределенная константа __FILE__ содержит полный путь и имя файла.
Если PHP выполняется из командной строки, эта переменная содержит имя сценария (доступно, начиная с PHP 4.3.0).
argv
Массив параметров, переданных сценарию. При использовании метода GET, он будет содержать строку запроса.
argc
Содержит номер параметров командной строки, переданных сценарию (если они переданы из командной строки).
GATEWAY_INTERFACE
Содержит версию CGI, которую использует веб-сервер (Например, CGI/1. 1).
SERVER_NAME
Имя веб-сервера, под которым текущий скрипт выполняется. Если скрипт исполняется на виртуальном веб-сервере, переменная будет содержать имя веб-сервера, которое было определено для виртуального веб-сервера.
SERVER_SOFTWARE
Идентификационная строка веб-сервера, которая передается через заголовки при ответах на запросы сервера.
SERVER_PROTOCOL
Имя и версия используемого протокола HTTP (Например, HTTP/1.1).
REQUEST_METHOD
Используемый метод запроса веб-страницы ( ‘GET’, ‘HEAD’, ‘POST’, ‘PUT’ ).
REQUEST_TIME
Время начала запроса веб-страницы. Доступна, начиная с PHP 5.1.0
QUERY_STRING
Строка запроса веб-страницы, если она существует, через которую был получен доступ к странице.
DOCUMENT_ROOT
Корневая директория, под которой выполняется текущий скрипт. Определяется конфигурацией веб-сервера.
HTTP_ACCEPT
Содержание заголовка Accept, если он есть.
HTTP_ACCEPT_CHARSET
Содержание заголовка Accept-Charset, если он есть. Пример: ‘ iso-8859-1,*,utf-8 ‘.
HTTP_ACCEPT_ENCODING
Содержание заголовка Accept-Encoding, если он есть. Пример: ‘ gzip ‘.
HTTP_ACCEPT_LANGUAGE
Содержание заголовка Accept-Language, если он есть. Пример: ‘ en ‘.
HTTP_CONNECTION
Содержание заголовка Connection, если он есть. Пример: ‘ Keep-Alive ‘.
HTTP_HOST
Содержание заголовка Host, если он есть.
HTTP_REFERER
Адрес страницы, которая ссылается на текущий документ посредством пользовательского клиента (программное обеспечение клиента). Не все пользовательские клиенты предоставляют данную информацию, а некоторые из них способны изменять HTTP_REFERER, следовательно, такой информации полностью доверять нельзя.
HTTP_USER_AGENT
Содержание заголовка ‘User-Agent’. Эта строка содержит информацию о пользовательском клиенте (программное обеспечение клиента), который обращается к странице. Типичный пример: Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Для получения подобной информации вы также можете использовать функцию get_browser()
REMOTE_ADDR
IP-адрес удаленного пользователя, который обращается к текущей странице.
REMOTE_HOST
Имя хоста удаленного пользователя, который обращается к текущей странице. Реверсивный поиск DNS базируется на REMOTE_ADDR удаленного пользователя. Примечание: веб-сервер должен поддерживать создание данной переменной. Например, в Apache опция HostnameLookups должна быть включена в конфигурационном файле httpd.conf (On). Смотрите также: gethostbyaddr()
REMOTE_PORT
Порт, используемый для соединения с веб-сервером
SCRIPT_FILENAME
Абсолютный путь для текущего скрипта.
SERVER_ADMIN
Значение, задаваемое SERVER_ADMIN (для Apache). Определяется директивой конфигурации веб-сервера. Если скрипт исполняется на виртуальном хосте, то значение определяется текущими настройками виртуального хоста веб-сервера.
SERVER_PORT
Текущий порт веб-сервера, используемы для предечи данных по протоколу HTTP. По-умолчанию ’80’.
SERVER_SINGATURE
Строка, содержащая версию веб-сервера или имя виртуального хоста.
PATH_TRANSLATED
Базовый путь к текущему сценарию.
SCRIPT_NAME
Содержит путь и имя файла текущего исполняемого скрипта.
REQUEST_URI
URI для текущей страницы, например, ‘ /index.html ‘.
PHP_AUTH_DIGEST
Если PHP работает как модуль Apache, переменная используется в аутентификации по протоколу HTTP, для проверки подлинности.
PHP_AUTH_USER
Если PHP работает как модуль Apache, либо как ISAPI IIS, данная переменная содержит имя авторизируемого пользователя при аутентификации по протоколу HTTP.
PHP_AUTH_PW
Если PHP работает как модуль Apache, либо как ISAPI IIS, данная переменная содержит пароль авторизируемого пользователя при аутентификации по протоколу HTTP.
AUTH_TYPE
Если PHP работает как модуль Apache, либо как ISAPI IIS, данная переменная содержит тип используемой аутентификации по протоколу HTTP.
Переменные окружения $_ENV
Доступны, начиная с PHP версии 4.1.0. В более ранних версиях PHP используйте $HTTP_ENV_VARS.
Эти переменные импортируются в глобальное пространство имен PHP, из среды, в которой работает интерпретатор PHP. Число и типы переменных зависят от оболочки, в которой работает PHP, поэтому список этих переменных привести невозможно. Смотрите документацию по оболочке, которую вы используете, чтобы ознакомиться со списком ваших переменных окружения.
Некоторые переменные окружения содержатся в переменных CGI, если вы используете PHP как CGI.
Переменные окружения $_ENV доступны внутри пользовательских функций. То есть вам не нужно объявлять суперглобальные переменные глобальными внутри пользовательских функций, делая что-то вроде этого: global $_ENV . На это не влияют даже настойки конфигурации PHP (php.ini).
Переменная $HTTP_ENV_VARS содержит ту же самую начальную информацию, но она не является автоглобальной переменной. (Заметьте, что $HTTP_ENV_VARS и $_ENV — это различные переменные).
HTTP Cookies: $_COOKIE
Доступны, начиная с PHP версии 4.1.0. В более ранних версиях PHP используйте $HTTP_COOKIE_VARS
Ассоциативный массив переменных, передаваемый текущему сценарию посредством HTTP Cookies.
Переменные HTTP Cookies доступны внутри пользовательских функций. То есть вам не нужно объявлять суперглобальные переменные глобальными внутри пользовательских функций, делая что-то вроде этого: global $_COOKIE . На это не влияют даже настойки конфигурации PHP (php.ini).
Переменная $HTTP_COOKIE_VARS содержит ту же самую начальную информацию, но она не является автоглобальной переменной. (Заметьте, что $HTTP_COOKIE_VARS и $_COOKIE — это различные переменные).
HTTP GET переменные: $_GET
Доступны, начиная с PHP версии 4.1.0. В более ранних версиях PHP используйте $HTTP_GET_VARS.
Ассоциативный массив переменных, передаваемый текущему сценарию посредством HTTP GET запросов.
Переменные HTTP GET доступны внутри пользовательских функций. То есть вам не нужно объявлять суперглобальные переменные глобальными внутри пользовательских функций, делая что-то вроде этого: global $_GET . На это не влияют даже настойки конфигурации PHP (php.ini).
Переменная $HTTP_GET_VARS содержит ту же самую начальную информацию, но она не является автоглобальной переменной. (Заметьте, что $HTTP_GET_VARS и $_GET — это различные переменные).
HTTP POST переменные: $_POST
Доступны, начиная с PHP версии 4.1.0. В более ранних версиях PHP используйте $HTTP_POST_VARS.
Ассоциативный массив переменных, передаваемый текущему сценарию посредством HTTP POST запросов.
Переменные HTTP POST доступны внутри пользовательских функций. То есть вам не нужно объявлять суперглобальные переменные глобальными внутри пользовательских функций, делая что-то вроде этого: global $_POST . На это не влияют даже настойки конфигурации PHP (php.ini).
Переменная $HTTP_POST_VARS содержит ту же самую начальную информацию, но она не является автоглобальной переменной. (Заметьте, что $HTTP_POST_VARS и $_POST — это различные переменные).
Переменные File Uploads HTTP: $_FILES
Доступны, начиная с PHP версии 4.1.0. В более ранних версиях PHP используйте $HTTP_POST_FILES.
Ассоциативный массив переменных, передаваемый текущему сценарию посредством HTTP POST запросов.
Переменные HTTP POST доступны внутри пользовательских функций. То есть вам не нужно объявлять суперглобальные переменные глобальными внутри пользовательских функций, делая что-то вроде этого: global $_FILES . На это не влияют даже настойки конфигурации PHP (php.ini).
Переменная $HTTP_POST_FILES содержит ту же самую начальную информацию, но она не является автоглобальной переменной. (Заметьте, что $HTTP_POST_FILES и $_FILES — это различные переменные).
Переменные запросов: $_REQUEST
Доступны, начиная с PHP версии 4.1.0. В более ранних версиях PHP не имеет эквивалентов. Начиная с PHP версии 4.3.0 $_REQUEST включает также $_FILES.
Ассоциативный массив, содержащий $_GET , $_POST , and $_COOKIE
Переменные запросов $_REQUEST доступны внутри пользовательских функций. То есть вам не нужно объявлять суперглобальные переменные глобальными внутри пользовательских функций, делая что-то вроде этого: global $_REQUEST . На это не влияют даже настойки конфигурации PHP (php.ini).
Переменные сессий $_SESSION
Доступны, начиная с PHP версии 4.1.0. В более ранних версиях PHP используйте $HTTP_SESSION_VARS.
Ассоциативный массив, содержащий переменные сессий, доступные для текущего скрипта. Для получения дополнительной информации, смотрите функции для работы с сессиями.
Переменные сессий доступны внутри пользовательских функций. То есть вам не нужно объявлять суперглобальные переменные глобальными внутри пользовательских функций, делая что-то вроде этого: global $_SESSION . На это не влияют даже настойки конфигурации PHP (php.ini).
Переменная $HTTP_SESSION_VARS содержит ту же самую начальную информацию, но она не является автоглобальной переменной. (Заметьте, что $HTTP_SESSION_VARS и $_SESSION — это различные переменные).
Глобальные переменные: $GLOBALS
Глобальные переменные доступны, начиная с PHP3.
Ассоциативный массив, содержащий ссылки на все переменные, которые в настоящее время определены в глобальной области сценария. Имена переменных — ключи массива.
Глобальные переменные доступны внутри пользовательских функций. То есть вам не нужно объявлять суперглобальные переменные глобальными внутри пользовательских функций, делая что-то вроде этого: global $GLOBALS . На это не влияют даже настойки конфигурации PHP (php.ini).
Сообщение последней ошибки PHP сценария: $php_errormsg
Переменная $php_errormsg содержит сообщение последней ошибки PHP скрипта.
Эта переменная будет доступна только в пределах области, в которой произошла ошибка, и только если опция track_errors конфигурации включена (по умолчанию она отключена).
Рекомендуем к прочтению
Знакомство с PHP переменными | PHP
При работе со значениями данных в PHP нам нужен удобный способ хранения, чтобы мы могли легко получить доступ к ним и при необходимости ссылаться на них.
PHP глобальные переменные можно рассматривать как место в памяти компьютера, где должны храниться данные. При объявлении переменной ей присваивается имя, которое может использоваться, чтобы ссылаться на нее в других местах программного кода. К значению переменной можно получить доступ, также оно может быть изменено, а тип переменной можно поменять, ссылаясь на ее имя.
Все имена переменных PHP должны быть снабжены префиксом $. Он информирует препроцессор языка, что он имеет дело с переменной. Первый символ имени должен быть буквой или символом подчеркивания (_). Остальные символы могут быть только буквами, цифрами или символами подчеркивания. Все остальные символы считаются недействительными для использования в имени переменной.
Посмотрим на некоторые допустимые и недопустимые имена переменных PHP:
$_myName // допустимо. $myName // допустимо. $__myvar // допустимо. $myVar21 // допустимо. $_1Big // недопустимо, подчеркивание должно следовать после буквы. $1Big // недопустимо - должно начинаться с буквы или символа подчеркивания. $_er-t // недопустимо - содержит буквенно-цифровой символ (-).
Имена PHP переменных чувствительны к регистру. Это означает, что PHP считает переменную $ _myVariable отличной от переменной » $ _myvariable.
Переменные инициализируются значениями с помощью оператора присваивания PHP (=). Чтобы присвоить значение переменной, ее имя помещается слева от выражения, за которым следует оператор присваивания. Значение, которое присваивается после PHP объявления переменных, помещается справа от оператора присваивания. Строка, как и во всех выражениях PHP кода, завершается точкой с запятой (;).
Начнем с присвоения слова «Круг» переменной с именем myShape:
Мы объявили переменную с именем myShape и присвоили ей строковое значение «Круг«. Аналогичным образом можно объявить переменную, содержащую численное значение:
Мы создаем переменную numberOfShapes и присваиваем ей числовое значение 6. После того, как PHP переменная была создана, присвоенное ей значение может быть изменено с помощью оператора присваивания:
<?php $numberOfShapes = 6; // Присвоено начальное значение $myShape = "Круг"; $numberOfShapes = 7; // Изменение изначального значения на новое $myShape = "Квадрат"; ?>
Теперь мы должны рассмотреть, как получить доступ к текущему значению, присвоенному переменной. Например, если мы хотим вывести на экран значение, которое мы присваивали переменной numberOfShapes, нужно сослаться на него в команде echo:
<?php echo "Номер фигуры $numberOfShapes."; ?>
Это приведет к следующему выводу в браузере:
Номер фигуры 6.
Точно так же можно отобразить значение переменной myShape:
<?php echo "$myShape – значение текущей фигуры."; ?>
Примеры, использованные для демонстрации доступа к значениям переменных, простые, потому что у нас всегда был пробел после имени переменной. Возникает вопрос, Что делать, если нужно поставить другие символы сразу после имени PHP переменной. Например:
<?php echo "Круг 6 $numberOfShapesth фигура"; ?>
То, что нам нужно в этом случае выводится следующим образом:
Круг это 6-я фигура.
К сожалению, PHP будет видеть th на конце имени переменной $ numberOfShapes как часть имени. Затем он попытается вывести значение переменной $ numberOfShapesth, которой не существует. Это приводит к тому, что значение этой переменной не отображается:
Круг это фигура.
Можно обойти эту проблему, поставив фигурные скобки ({ }) вокруг имени переменной, чтобы экранировать ее от других символов:
<?php echo "Круг это ${numberOfShapes}th фигура"; ?>
Что дает нам желаемый результат:
Круг это 6-я фигура.
PHP типы переменных: целое, вещественное, логическое, массив, объект и строка. Для начала рассмотрим изменение типа переменной после ее создания.
PHP является слабо типизированным языком. Правила строго типизированного языка диктуют, что как только переменная была объявлена как определенный тип, ее тип не может быть изменен позже. В Java, например, нельзя присвоить число с плавающей точкой переменной, которая первоначально была объявлена как строка.
Слабо типизированные языки, такие как PHP и JavaScript, позволяют изменять тип переменной в любой момент существования переменной путем присвоения ей значения другого типа. Например, можно создать переменную, присвоить ей целое значение, а позже поменять на string:
<?php $myNumber = 6; // переменная целого типа $myNumber = "шесть"; // тип переменной изменился на строковый ?>
Процесс динамического изменения типа переменной называется автоматическим преобразованием типов.
В PHP проверка существования переменной является часто используемой операцией. В этом языке предусмотрен механизм для обеспечения этой возможности путем использования функции isset(). Чтобы проверить, имеет ли переменная значение, вызывают функцию isset(), которой в качестве аргумента передается имя переменной:
<?php $myVariable = "Привет"; if (isset($myVariable)) { echo "Переменная инициализирована."; } else { echo " Переменная не инициализирована."; } ?>
Данная публикация представляет собой перевод статьи «An Introduction to PHP Variables» , подготовленной дружной командой проекта Интернет-технологии.ру
Глобальные переменные PHP
15 июля 2010 г.Учебник по глобальным переменным в PHP. Как использовать глобальный, суперглобальный в PHP.
Глобальные переменные могут использоваться с предварительным определением или без него. Мне нравится предопределение, ведьма быстрее, и вы хорошо видите свои переменные. Осторожно используйте супергобалы, потому что они могут нанести вред, испортить вам HTML или полностью стереть базу данных MySQL.
Глобальные переменные:
Глобальные переменные работают в файле, но не во всем проекте. Для любого проекта вы хотите использовать суперглобальные переменные.Программа просмотра исходного кода
// $ x - глобальная переменная, $ y - определенная глобальная переменная
global $ x;
$ y = 'var1';
$ x = 'var2';
function example_func () {
// глобальная переменная
global $ z;
$ z = «тест»;
// статическая переменная
$ static_var1 = 'static';
// определенная статическая переменная, это быстрее, когда вы определяете переменные
static $ static_var2;
$ static_var2 = 'статический';
echo $ x.'и'. $ y; // вы можете увидеть оба из них
}
example_func ();
эхо $ z; // вы можете увидеть "test"
// эти статики невидимы или вызывают ошибки.
echo $ static_var1. $ Static_var2;
Суперглобальные переменные:
Суперглобальные переменные могут использоваться абсолютно в любом месте кода. $ _SERVER
Переменные, которые задаются веб-сервером.
Программа просмотра исходного кода
// Эта строка печатает IP-адрес вашего компьютера
echo $ _SERVER ['REMOTE_ADDR'];
$ _GET
Массив переменных, переданных текущему скрипту через параметры URL. В одинарных кавычках вы можете поместить имена переменных формы или URL. Эти данные могут быть небезопасными при неправильной обработке.
$ _POST
Переменные, предоставляемые методом HTTP POST. Вы можете получить параметры формы по имени, если метод настроен на публикацию.Вы также можете отправлять данные формы с помощью AJAX. Учебник: отправка формы CodeIgniter AJAX.
$ _COOKIE
Используя этот суперглобал, вы можете получать переменные из файлов cookie. При изготовлении тележки для примера.
$ _FILES
Если вы отправляете файлы через формы, используя метод отправки, вы можете поймать их, используя этот суперглобальный.
$ _REQUEST
Переменные, предоставляемые суперглобальными объектами GET, POST и COOKIE, поступают от клиента и поэтому не могут быть доверены.
$ GLOBALS
Содержит ссылку на каждую переменную, которая в настоящее время доступна в глобальной области сценария.
Типы данных PHP, переменные, константы, Учебное пособие по операторам
- Home
Testing
- Back
- Agile Testing
- BugZilla
- Cucumber
- Database Testing
- ETL Testing
- Jmeter
- ETL Testing
- Jmeter
- Назад
- JUnit
- LoadRunner
- Ручное тестирование
- Мобильное тестирование
- Mantis
- Почтальон
- QTP
- Назад
- Центр качества (ALM)
- RPA
- Тестирование SAP Selenium
- SAP Selenium
- SoapUI
- Управление тестированием
- TestLink
SAP
- Назад 90 012 ABAP
- APO
- Начинающий
- Basis
- BODS
- BI
- BPC
- CO
- Назад
- CRM
- Crystal Reports
- FICO
- HANA
- HR
- MM
- Заработная плата
- Назад
- PI / PO
- PP
- SD
- SAPUI5
- Безопасность
- Менеджер решений
- Successfactors
- SAP Tutorials
Web
- 9012 9012
- Apache
- AngularJS
- ASP.Net
- C
- C #
- C ++
- CodeIgniter
- СУБД
- JavaScript
- Назад
- Java
- JSP
- Kotlin
- Linux
- MariaDB
- MS Access
- MYSQL
- Node. js
- Perl
- Назад
- PHP
- PL / SQL
- PostgreSQL
- Python
- ReactJS
- Ruby & Rails
- Scala
- SQL
- SQLite
- Назад
- SQL Server
- UML
- VB.Net
- VBScript
- Веб-службы
- WPF
Обязательно учите!
- Назад
- Бухгалтерский учет
- Алгоритмы
- Android
- Блокчейн
- Бизнес-аналитик
- Создание веб-сайта
- Облачные вычисления
- COBOL
- Дизайн компилятора
- Назад
- Встроенные системы
- Этичный взлом
- Учебники по Excel
- Программирование на Go
- IoT
- ITIL
- Jenkins
- MIS
- Сеть
- Операционная система
- Назад
- Подготовка
- PMP
- Photoshop
- Управление проектами
- Обзоры
- Salesforce
- SEO
- Разработка программного обеспечения
- VBA
Big Data
- Назад
- AWS
- BigData
- Cassandra
- Cognos
- Хранилище данных
- DevOps
- HBase
- InformStatic
- Hivea
- Back
- Hivea
- Hivea
- MongoDB
- NiFi
Как использовать переменные переменные PHP
- Программирование
- PHP
- Как использовать переменные переменные PHP
Автор: Стив Суэхринг, Janet Valade
позволяет вы должны использовать имена динамических переменных, называемых переменными переменных . Вы можете присвоить переменной имя, значение которого хранится в другой переменной. То есть одна переменная содержит имя другой переменной. Например, предположим, что вы хотите создать переменную с именем $ city со значением Лос-Анджелес. Вы можете использовать следующую инструкцию:$ name_of_the_variable = "город";
Этот оператор создает переменную, содержащую имя, которое вы хотите дать переменной. Затем вы используете следующий оператор:
$$ name_of_the_variable - «Лос-Анджелес»;
Обратите внимание на дополнительный знак доллара ($) в начале имени переменной.Это указывает на переменную переменную. Этот оператор создает новую переменную с именем, которое является значением в $ name_of_the_variable, в результате получается следующее:
$ city = "Лос-Анджелес";
Значение $ name_of_the_variable не изменяется.
В следующем примере показано, как работает эта функция. В нынешнем виде операторы сценария могут показаться не очень полезными; вы можете найти лучший способ запрограммировать эту задачу. Истинное значение переменных переменных становится ясным, когда они используются с массивами и циклами.
Предположим, вы хотите присвоить серии переменных имена городов, значения которых соответствуют населению этих городов. Вы можете использовать этот код:
$ Рино = 360000; Пасадена = 138000 $; $ cityname = "Рино"; echo "Размер $ cityname равен $ {$ cityname}"; $ cityname = "Пасадена"; echo "Размер $ cityname равен $ {$ cityname}";
Вывод этого кода:
Размер Рино 360000 Размер Пасадены 138000
Обратите внимание, что вам нужно использовать фигурные скобки вокруг имени переменной в операторе echo, чтобы PHP знал, где находится имя переменной.Если вы используете оператор без фигурных скобок, результат будет следующим:
Размер Рино -$.
Без фигурных скобок в $$ cityname PHP преобразует $ cityname в его значение и помещает перед ним дополнительные $ как часть предыдущей строки.
Об авторе книги
Стивен Сюринг — архитектор технологий и автор или редактор нескольких популярных книг по технологиям. Джанет Валад — технический писатель, веб-дизайнер, программист и системный аналитик.Она провела различные технические семинары и написала несколько книг, в том числе PHP и MySQL для чайников, 4-е издание .
глобальных переменных — PHP
Sandman schrieb:Не думаю, что понимаю их. Я вывернул наизнанку раздел о прицеле в руководствеГлобальные переменные — это в значительной степени переменные, которые вам вообще не следует использовать
.
если вы планируете писать приложения PHP, которые хранятся в более чем
вроде трех файлов.Глобальные переменные создают всевозможные проблемы:
— Они используются во всех файлах вашей программы. Если вы решили
повторно использовать части вашей программы в другом проекте, вы должны составить список
всех глобальных переменных, чтобы вы не столкнулись с
переменные вашего нового проекта.
— Если вы используете внешние пакеты, вы не знаете, какие глобальные переменные
может использовать этот пакет. Общие переменные, такие как $ name, легко перезаписать
, и ад вырвется наружу. Эта проблема известна как «загрязнение
глобального пространства имен».
— В зависимости от конфигурации сервера (register_globals) посетитель может отправить вам
глобальных переменных. Это делает их небезопасными, поскольку
нельзя доверять содержимому глобальных переменных. Важным правилом в веб-программировании
является НИКОГДА НЕ ДОВЕРЯЙТЕ ПОЛЬЗОВАТЕЛЬСКОМУ ВВОДУ, поэтому это означает САНИТИЗИРУЙТЕ ВСЕ ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ
перед их использованием. Или … не используйте их.
— Глобальные переменные в PHP не такие глобальные, как в других языках
, где вы иногда всегда можете увидеть глобальные переменные.В некоторых языках
даже есть ключевое слово «local», чтобы запретить переменной из
стать глобальной. Вместо этого в PHP есть ключевое слово global, определяющее переменную
как глобальную. Но лучше забудьте это ключевое слово для больших проектов!
Лучшей альтернативой глобальным переменным являются статические переменные класса:
class MyVars
{
static $ var1 = ‘value1’;
}
MyVars :: $ var1 = ‘huba’;
Примечание. Использование редкого (лучшего: уникального) префикса для всех имен классов
гарантирует, что вы можете поделиться кодом с другими проектами без проблем
.Префиксы — плохое оправдание PHP для пространств имен, пока они
, надеюсь, не станут доступными в какой-то момент. У этих уродливых пространств имен на основе обратного домена
в Java есть цель: они обеспечивают уникальность.
Могу ли я сохранить изменения при загрузке страниц с помощью глобальных переменных?Нет. Основное правило: PHP не имеет состояния. Вы теряете все после
запрос обслуживается. Каждый сценарий PHP на веб-сервере запускается после
запрос сделан. Скрипт может принимать входные данные в виде четырех
разные концепции:
G — GET данные, это URL, переменные передаются в
? var = значение & var2 = значение2.Эти данные имеют «постоянство просмотра», они привязаны к
окно браузера. Нажмите F5, и те же данные будут отправлены снова. Всего
хранится в URL. Вы даже можете добавить данные в закладки. Данные GET ограничены
по длине он не может превышать нескольких килобайт, в зависимости от браузера
пределы.
P — данные POST, обычно они генерируются при отправке формы. Переменные
передаются в формате, аналогичном GET, но на этот раз в
теле запроса, а не в URL.Эти данные имеют «ограниченное постоянство просмотра
». Браузер может спросить вас, хотите ли вы повторно отправить данные формы
, если вы нажмете F5, но обычно данные теряются после обработки формы
. Данные POST могут быть огромными, в случае загрузки файлов они могут достигать
нескольких мегабайт.
C — данные COOKIE, они сохраняются в браузере посетителя, если браузер
принимает файлы cookie. Данные файлов cookie имеют «постоянство сеанса» или даже
«постоянство нескольких посещений», в зависимости от настроек в браузере посетителя
и времени истечения срока действия, установленного для файла cookie.Эти данные
совместно используются во всех окнах или вкладках, которые посетитель открывает при просмотре вашего сайта
, потому что он привязан к домену. НЕ ДОВЕРЯЙТЕСЬ НА ФАЙЛЫ, потому что
посетителей могут отказаться принимать какие-либо файлы cookie.
S — данные SESSION, они хранятся на вашем сервере, по умолчанию в простом файле
во временном каталоге. С точки зрения персистентности это
похоже на данные cookie, но обычно вы не можете определить, как долго данные будут сохраняться
. Не ожидайте, что данные сеанса будут длиться дольше, чем сеанс посетителя
при просмотре вашего сайта.Проблема с сеансами
заключается в том, что вы должны знать, какие данные сеанса принадлежат какому посетителю
, потому что они не связаны косвенно. Это соединение устанавливается
с идентификатором сеанса. Это переменная, которая должна передаваться из запроса
в запрос с помощью метода G, P или C. Функции сеанса PHP
позволяют автоматически передавать идентификатор сеанса из запроса в запрос
.
Эта схема GPCS сопровождается E, информацией о среде
сервера, на котором работает ваш PHP.Комбинация EGPCS — это значение по умолчанию
для директивы конфигурации varaibles_order (см.
http://de.php.net/manual/en/ini.core…riables-order). Эта директива
определяет а) какие из источников данных используются в качестве входных данных для вашего сценария
и б) какие данные проходят, если есть переменные с таким же именем
. P идет после G, поэтому переменная POST перезаписывает переменную GET
с тем же именем.
ПОМНИТЕ: данные сеанса обычно распределяются между всеми открытыми окнами посетителя
точно так же, как файлы cookie! Чтобы сохранить значения многостраничной формы в
сеансе, вы не можете просто записать данные в сеанс.Что если
посетитель откроет одну и ту же форму дважды? Вы должны работать с массивом
и уникальным идентификатором экземпляра формы в качестве ключа в массиве. Или вы используете
скрытых поля или храните данные в базе данных постранично, но это
другая история.