PHP область действия переменных
При использвании переменных в программе на PHP необходимо принимать во внимание область их действия (видимости). Это — тот контекст (блок кода), где их можно использовать.
По умолчанию, переменная видна и может быть использована в том контексте, в котром её определили.
К этому же контексту отосятся блоки кода, вставленные из других файлов при помощи операторов include и requre.
Константы (и пользовательские и стандартные PHP) видны во всех контекстах.
В примере: те переменные, которые определены в области видимости «контекст1», доступны и в коде, нходящемся в файле file1.php и в фукциях f1(), f2().
Те переменные, которые пределены в областях видимости «контекст2» и «конткст3» доступны тлько в этих контекстах.
Суперглобальные переменные
Некоторые предопределённые переменные в PHP являются «суперглобальными», что означает, что они доступны в любом месте скрипта.
Суперглобальными переменными являются:
- $GLOBALS — Ссылки на все переменные глобальной области видимости.
Ассоциативный массив (array), содержащий ссылки на все переменные глобальной области видимости скрипта, определенные в данный момент. Имена переменных являются ключами массива. - $_SERVER — Информация о сервере и среде исполнения. Переменная $_SERVER — это массив, содержащий информацию, такую как заголовки, пути и местоположения скриптов. Записи в этом массиве создаются веб-сервером.
- $_GET — GET-переменные HTTP. Ассоциативный массив параметров, переданных скрипту через URL.
- $_POST — POST-переменные HTTP. Ассоциативный массив данных, переданных скрипту через HTTP метод POST.
- $_FILES — Переменные файлов, загруженных по HTTP. Ассоциативный массив (array) элементов, загруженных в текущий скрипт через метод HTTP POST.
- $_REQUEST — Переменные HTTP-запроса. Ассоциативный массив (array), который по умолчанию содержит данные переменных $_GET, $_POST и $_COOKIE.
- $_SESSION — Переменные сессии. Ассоциативный массив, содержащий переменные сессии, которые доступны для текущего скрипта.
- $_ENV — Переменные окружения. Ассоциативный массив (array) значений, переданных скрипту через переменные окружения. Эти значения импортируются в глобальное пространство имен PHP из системных переменных окружения, в котором запущен парсер PHP.
- $_COOKIE — HTTP Куки. Ассоциативный массив (array) значений, переданных скрипту через HTTP Куки.
$_SERVER
Описание
Переменная $_SERVER — это массив, содержащий информацию, такую как заголовки, пути и местоположения скриптов. Записи в этом массиве создаются веб-сервером. Нет гарантии, что каждый веб-сервер предоставит любую из них; сервер может опустить некоторые из них или предоставить другие, не указанные здесь. Тем не менее, многие эти переменные присутствуют в » спецификации CGI/1.1, так что вы можете ожидать их реализации и в конкретном веб-сервере.
Замечание: До версии PHP 5.4.0, $HTTP_SERVER_VARS содержит ту же начальную информацию, но она не суперглобальная.
(Заметьте, что $HTTP_SERVER_VARS и $_SERVER являются разными переменными, так что PHP обрабатывает их соответственно).
Индексы
Вы можете найти (а можете и не найти) любой из следующих элементов в массиве $_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’
- Имя хоста, на котором выполняется текущий скрипт. Если скрипт выполняется на виртуальном хосте, здесь будет содержатся имя, определенное для этого виртуального хоста.
Замечание: Под Apache 2, вы должны выставить UseCanonicalName = On и ServerName. Иначе, это значение отразит имя хоста клиента и может быть подделано. Не безопасно полагаться на это значение в контексте требующем безопасности.
- ‘SERVER_SOFTWARE’
- Строка идентификации сервера, указанная в заголовках, когда происходит ответ на запрос.

- ‘SERVER_PROTOCOL’
- Имя и версия информационного протокола, через который была запрошена страница; к примеру ‘HTTP/1.0’;
- ‘REQUEST_METHOD’
- Какой метод был использован для запроса страницы; к примеру ‘GET’, ‘HEAD’, ‘POST’, ‘PUT’.
Замечание:
PHP скрипт завершается после посылки заголовков (тоесть после того, как осуществляет любой вывод без буферизации вывода), если запрос был осуществлен методом HEAD.
- ‘REQUEST_TIME’
- Временная метка начала запроса. Доступна, начиная с PHP 5.1.0.
- ‘REQUEST_TIME_FLOAT’
- Временная метка начала запроса с точностью до микросекунд. Доступна, начиная с PHP 5.4.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() чтобы адаптировать вывод вашей страницы к возможностям браузера пользователя
- ‘HTTPS’
- Принимает непустое значение, если запрос был произведен через протокол HTTPS.
Замечание: Обратите внимание, что при использовании ISAPI с IIS значение будет off, если запрос не был произведен через протокол HTTPS.
- ‘REMOTE_ADDR’
- IP-адрес, с которого пользователь просматривает текущую страницу.

- ‘REMOTE_HOST’
- Удаленный хост, с которого пользователь просматривает текущую страницу. Обратный просмотр DNS базируется на значении переменной REMOTE_ADDR.
Замечание: Ваш веб-сервер должен быть настроен, чтобы создавать эту переменную. Для примера, в Apache вам необходимо присутствие директивы HostnameLookups On в файле httpd.conf, чтобы эта переменная создавалась. См. также gethostbyaddr().
- ‘REMOTE_PORT’
- Порт на удаленной машине, который используется для связи с веб-сервером.
- ‘REMOTE_USER’
- Аутентифицированный пользователь.
- ‘REDIRECT_REMOTE_USER’
- Аутентифицированный пользователь, если запрос был перенаправлен изнутри.
- ‘SCRIPT_FILENAME’
-
Абсолютный путь к скрипту, который в данный момент исполняется.

Замечание:
Если скрипт запускается в коммандной строке (CLI), используя относительный путь, такой как file.php или ../file.php, переменная $_SERVER[‘SCRIPT_FILENAME’] будет содержать относительный путь, указанный пользователем.
- ‘SERVER_ADMIN’
- Эта переменная получает свое значение (для Apache) из директивы конфигурационного файла сервера. Если скрипт запущен на виртуальном хосте, это будет значение, определенное для данного виртуального хоста.
- ‘SERVER_PORT’
- Порт на компьютере сервера, используемый веб-сервером для соединения. Для установок по умолчанию, значение будет ’80’; используя SLL, например, это значение будет таким, какое сконфигурировано для соединений безопасного HTTP.
Замечание: Чтобы получить физический (реальный) порт в Apache 2, необходимо установить UseCanonicalName = On иUseCanonicalPhysicalPort = On, иначе это значение может быть подменено и не вернуть реальной значение физического порта.
Полагаться на это значение небезопасно в контексте приложений, требующих усиленной безопасности. - ‘SERVER_SIGNATURE’
- Строка, содержащая версию сервера и имя виртуального хоста, которые добавляются к генерируемым сервером страницам, если включено.
- ‘PATH_TRANSLATED’
- Filesystem- (not document root-) based path to the current script, after the server has done any virtual-to-real mapping.
Замечание: Начиная с PHP 4.3.2, переменная PATH_TRANSLATED больше не устанавливается неявно в Apache 2 SAPI, по сравнению с Apache версии 1, где она устанавливается в то же самое значение, что и переменная SCRIPT_FILENAME, когда она не используется Apache. Это изменение было сделано для соответствия спецификации CGI, где переменная PATH_TRANSLATEDдолжна существовать только тогда, когда PATH_INFO определена. Пользователи Apache 2 могут использовать директивуAcceptPathInfo = On в конфигурационном файле httpd.
conf для задания переменной PATH_INFO. - ‘SCRIPT_NAME’
- Содержит путь, к текущему исполняемому скрипту. Это полезно для страниц, которые должны указывать на самих себя. Константа __FILE__ содержит полный путь и имя текущего (т.е. включаемого) файла.
- ‘REQUEST_URI’
- URI, который был передан для того, чтобы получить доступ к этой странице. Например, ‘/index.html’.
- ‘PHP_AUTH_DIGEST’
- При выполнении HTTP Digest аутентификации, этой переменной присваивается заголовок ‘Authorization’, который присылается клиентом (его необходимо потом использовать для соответствующей валидации).
- ‘PHP_AUTH_USER’
- Когда выполняется HTTP-аутентификация, этой переменной присваивается имя пользователя, предоставленное пользователем.
- ‘PHP_AUTH_PW’
- Когда выполняется HTTP-аутентификация, этой переменной присваивается пароль, предоставленный пользователем.

- ‘AUTH_TYPE’
- Когда выполняется HTTP-аутентификация, этой переменной присваивается тип аутентификации, который используется.
- ‘PATH_INFO’
- Содержит любой предоставленный пользователем путь, содержащийся после имени скрипта, но до строки запроса, если доступно. Например, если текущий скрипт запрошен по URL http://www.example.com/php/path_info.php/some/stuff?foo=bar, то переменная $_SERVER[‘PATH_INFO’] будет содержать /some/stuff.
- ‘ORIG_PATH_INFO’
- Исходное значение переменной ‘PATH_INFO’ до начала обработки PHP.
Область видимости — HTML, CSS, JavaScript, Perl, PHP, MySQL: Weblibrary.biz
Из введения к этому занятию вы узнали, что подпрограммы позволяют сгруппировать фрагменты кода и дать им имена, которые затем можно использовать для вызова этих фрагментов кода из любого нужного места программы. Подпрограммы позволяют создать функционально законченные модули, решающие универсальные задачи.
На основе переданных аргументов, встроенных функций и выражений подпрограмма возвращает определенное значение. Вы можете использовать эту подпрограмму в других программах, так как ее выполнение не зависит от окружающего контекста, — она просто берет аргументы, внутренние данные и на их основании вычисляет возвращаемое значение. Функция становится как бы «черным ящиком», который связывают с внешним миром только входные и выходные значения. Такие функции называются строгими.
А теперь давайте проанализируем два следующих фрагмента кода.
По большому счету, первая реализация функции намного лучше. Она не использует предустановленных внешних переменных. Вместо этого она копирует аргумент в переменную $veight и производит все вычисления с ней. Вторую реализацию трудно использовать в другой программе, для этого нужно, чтобы переменной $weight было присвоено соответствующее значение и обозначало то, что нам нужно. Если переменная с таким именем уже используется в других целях, вам придется изменить имя переменной, используемое в функции moonweight (), что не очень удобно.
Итак, первый вариант реализации лучше, но в нем по-прежнему чего-то не хватает. Переменная $weight может конфликтовать с другой переменной с подобным именем, если та встречается в программе.
Perl позволяет использовать одни и те же имена для обозначения различных переменных в большой программе. По умолчанию переменные Perl видимы в основной программе и в подпрограммах. Это так называемые глобальные переменные.
Допустим, вам нужно создать переменную, относящуюся только к данной функции. Для этого следует воспользоваться оператором my:
Внутри функции moonweight () переменная $weight является приватной переменной. Другие функции программы не имеют доступа к этой переменной. Таким образом, все другие переменные с именем $weight не пересекаются с переменной $weight функции moonweightf). Теперь подпрограмма совершенно изолирована от остальной части программы.
Та часть программы, в которой можно использовать данную переменную, называется областью видимости переменной.
Оператор my можно использовать для объявления скаляров, массивов и хэшей, как приватных переменных подпрограммы. Дескрипторы файлов, подпрограммы и специальные переменные Perl ($!, $ , 8_ и др.) нельзя объявить приватными переменными. Можно объявлять сразу несколько переменных, поместив их имена в скобки:
Приватные переменные хранятся совсем не так, как глобальные. Глобальные и приватные переменные могут иметь одинаковые имена, но при этом не конфликтовать, как показано ниже:
В результате выполнения этого примера будут выведены числа 10, 20, а затем снова 10. Переменные $х в функции myfunc() и $х в основной части программы — совершенно разные. У вас может возникнуть один резонный вопрос: «Возможно ли в подпрограмме использовать как приватную, так и глобальную переменную с одним и тем же именем?» Да, но это достаточно сложный вопрос, обычно не рассматриваемый начальными учебными пособиями по Perl.
Как правило, любая подпрограмма на Perl начинается с объявления приватных переменных и присваивания массива @_ списку этих переменных:
Эта техника программирования позволяет создавать удобные в использовании, или, как их еще называют, дружественные функции: все их переменные являются приватными, поэтому эти переменные не могут изменить или быть изменены другими функциями, или основной частью программы.
После окончания подпрограммы ее приватные переменные аннулируются.
Использование оператора my
Можно объявить переменные даже с меньшей областью видимости, чем целая подпрограмма. Для этого следует поместить оператор ту в блок. Это может быть как основной блок подпрограммы, так и какой-нибудь другой блок. В следующем примере приватная переменная видима только в блоке:
Объявлять переменные можно даже внутри управляющей структуры, такой как for, foreach, while или if. В общем, какой бы у вас ни был блок, можно создать переменную с областью видимости внутри этого блока, как показано в следующем примере:
Здесь переменные, объявленные в операторе my, заново создаются во время каждой итерации цикла.
В Perl версии 5.004 и выше можно переменную (итератор) цикла for или foreach, a также условное выражение структур while или if объявить приватными для блока:
По окончании блока его приватные переменные аннулируются.
филиппинских песо
филиппинский песоОбласть действия переменной
Область видимости переменной — это контекст, в котором она определена.
По большей части все переменные PHP имеют только одну область видимости.
Глобальные переменные позволяют вам пересекать границу между отдельными функциями для доступа к значению переменной. Оператор global указывает, что вы хотите, чтобы переменные были одной и той же переменной везде, где она определена как глобальная.
Статические переменные предоставляют переменную, которая не уничтожается при завершении функции. Вы можете снова использовать значение статической переменной при следующем вызове функции, и оно по-прежнему будет иметь то же значение, что и при последнем использовании в функции.
Суперглобальные переменные, называемые суперглобальными, предоставляют информацию об окружении PHP-скрипта.
Эти переменные не нужно объявлять глобальными. Они доступны автоматически и предоставляют важную информацию помимо самого кода скрипта, например значения, введенные пользователем. Они здесь:
| Переменные | Описание |
|---|---|
| $ГЛОБАЛЬНЫЕ | Содержит ссылку на каждую переменную, которая в настоящее время доступна в глобальной области действия скрипта. Ключами этого массива являются имена глобальных переменных. |
| $_СЕРВЕР | Содержит информацию о среде веб-сервера. |
| $_GET | Содержит информацию из запросов GET (отправка формы). Эти значения должны быть проверены перед использованием. |
| $_POST | Содержит информацию из запросов POST (отправка формы). Эти значения должны быть проверены перед использованием.![]() |
| $_COOKIE | Содержит информацию из файлов cookie HTTP. |
| $_ФАЙЛЫ | Содержит информацию о загрузках файлов POST. |
| $_ENV | Содержит информацию о среде сценариев. |
| $_ЗАПРОС | Содержит информацию, введенную пользователем. Эти значения должны быть проверены перед использованием. |
| $_СЕССИЯ | Содержит информацию из любых переменных, зарегистрированных в сеансе. |
Переменные | Идентификаторы | Что такое переменные? | Присвоение значений переменным | Типы данных | Область действия переменных | Интерполяция переменных в строках | Создание переменных Переменные | Создание констант
© 2008: Ханн Со
электронная почта: [email protected]
Variable Scope — Знай код
Раскройте свой потенциал с членством
Здесь вы продвинете свою карьеру.
Присоединяйтесь к нам сегодня. Учить больше.
Присоединяйтесь
Войдите в свою учетную запись
Перейти к списку воспроизведения эпизодов
Давайте поговорим о переменной области видимости. Область определяет, как и где вы можете получить доступ к переменным и использовать их. Это относится к памяти. Переменная внутри функции принадлежит этой функции. Область видимости похожа на привратника. Он защищает наш код от других функций и кода, чтобы гарантировать, что у нас есть контроль. Он защищает наши имена переменных, чтобы избежать конфликтов имен.
Что определяет объем? Имеют ли инструкции область действия, например foreach ?
Дополнительная информация
Эпизод #10
31:44 Продолжительность
Обзор – кто может общаться с кембесплатно
Lab: Building Blocks of Programming Давайте поговорим о области видимости, т.
е. о том, кто с кем может общаться в вашей программе. Он определяет правила, определяющие, какой код может взаимодействовать с другим кодом. Это техническое обсуждение, которое включает в себя то, как используется и распределяется память.
Узнать больше
Эпизод #13
08:34 Время выполнения
Что случилось с прицелом?бесплатно
Лабораторная работа: PHP 101: Нежное введение в программирование WordPress Как обстоят дела с областью действия? Если вы работаете над темой или каким-то кодом, вы услышите о масштабе. Или, может быть, вы пытались получить доступ к переменной, которая находится в другой функции, и вы не понимаете, почему вы не можете получить к ней доступ. Почему? А глобальные переменные? Давайте поговорим о размахе. Область определяет, какие части вашего кода могут получить доступ к другому коду. В этом эпизоде мы поговорим конкретно о переменных и их области видимости.
Переменные имеют область видимости. Они относятся к некоторому уровню доступа. Переменные внутри функции принадлежат этой функции. Функция может использовать их, но код вне этого […]
Узнать больше
Перерыв. Иди отдохни лапшу пару минут.
Общее время работы лаборатории: 01:50:52
- 1 Знакомство с переменными PHPfree 03:44
- 2 Назначение и наименование переменных PHPfree 12:43
- 3 Переменная Scopebasic 08:24
- 4 Основные параметры функции 08:46
- 5 Переменная — PHP Internalspro 11:08
- 6 Глобальные переменныеbasic 09:10
- 7 Глобальные переменные — PHP Internalspro 02:52
- 8 Статические переменныеосновные 13:05
- 9 Статические переменные — PHP Internalspro 05:01
- 10 Передача переменных по ссылкеpro 10:04
- 11 Передача переменных по ссылке — PHP Internalspro 08:01
- 12 Пространство именосновное 01:37
- 13 Область видимости переменной при включении Filesbasic 08:24
- 14 Тип Жонглированиебазовый 07:53


Ассоциативный массив (array), содержащий ссылки на все переменные глобальной области видимости скрипта, определенные в данный момент. Имена переменных являются ключами массива.
(Заметьте, что $HTTP_SERVER_VARS и $_SERVER являются разными переменными, так что PHP обрабатывает их соответственно).
Когда вызывается через метод GET, этот массив будет содержать строку запроса.

Этот заголовок устанавливается веб-браузером пользователя. Не все браузеры устанавливают его и некоторые в качестве дополнительной возможности позволяют изменять содержимое заголовка HTTP_REFERER. Одним словом, в самом деле ему нельзя доверять.

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