Php область видимости переменных: PHP: Область видимости переменной — Manual

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.

РНР: настольная книга программиста

РНР: настольная книга программиста
  

Мазуркевич А. РНР: настольная книга программиста /Александр Мазуркевич, Дмитрий Еловой. — Мн.: Новое знание, 2003. — 480 с.

В удобной наглядной форме описаны все элементы РНР — популярного языка создания CGI-сценариев. Рассмотрены не только особенности синтаксиса языка, но и редактирование кода в программах EditPlus и UltraEdit, а также установка РНР и сервера Apache. Материал систематизирован таким образом, что читатель может использовать книгу и как учебник, и как справочник. Примеры, взятые из реальной практики Web-программирования, позволяют лучше усвоить теоретический материал.

Книга рассчитана на самую широкую аудиторию — не только на новичков, но и на опытных программистов.



Оглавление

Предисловие
О чем эта книга
Принятые выделения
Введение
Часть I. Основные характеристики РНР
Глава 1 Введение в РНР
1.2. Преимущества и недостатки РНР
Глава 2. Установка РНР
2.1. Установка на системы Unix
2.2. Установка на системы Linux
2.3. Установка на системы Windows 9x/Me/NT/2000
2. 4. Установка расширений функциональных возможностей Windows
2.5. Тестирование РНР
Глава 3. Быстрая установка Apache-сервера
3.1. Потребность в виртуальном сервере
3.2. Установка Apache
3.3. Виртуальные хосты Apache
Глава 4. Текстовый редактор, используемый для редактирования РНР-скриптов
4.2. Новые возможности редактора EditPlus 2.10
4.3. Меню File
4.4. Меню Edit
4.5. Меню View
4.6. Меню Search
4.7. Меню Document
4.8. Меню Project
4.9. Меню Tools
4.10. Меню Window
4.11. Меню Help
4.12. Панель инструментов
Заключение
Глава 5. Конфигурация
5.2. Директивы конфигурации почты
5.3. Директивы конфигурации Safe Mode
5.4. Директивы конфигурации отладчика
5.5. Директивы загрузки расширений (Extension Loading)
5.6. Директивы конфигурации MySQL
5.7. Директивы конфигурации mSQL
5.8. Директивы конфигурации Postgres
5.9. Директивы конфигурации Sybase
5.10. Директивы конфигурации унифицированных ODBC
5. 11. Директивы конфигурации модуля Apache
Заключение
Глава 6. Проблемы безопасности
6.2. Установка модуля Apache
6.3. Безопасность файловой системы
6.4. Создание virtualHost с разумными ограничениями безопасности РНР
Заключение
Часть II. Программирование на РНР
7.1. Способы ввода PHP-кода в документ
7.2. Разделение инструкций
7.3. Использование комментариев
Заключение
Глава 8. Типы данных в PHP
8.2. Строки
8.3. Преобразование строк
8.4. Массивы
8.5. Указатель array pointer
8.6. Изменение типа
8.7. Определение типов переменных
8.8. Приведение типа
Заключение
Глава 9. Переменные в PHP
9.2. Операция получения адреса
9.3. Область видимости (scope) в PHP
9.4. Переменные переменных
9.5. Передача параметров скрипту при запуске из командной строки
9.6. Формы HTML (Get/Post)
9.7. Передача значенийпеременных, соответствующих кнопкам формы
9.8. HTTP-Cookies
9.9. Системные переменные
9. 10. Точки в именах входящих переменных
9.11. Как проверить, был ли отмечен checkbox в форме
9.12. Определение типов переменных
Заключение
Глава 10. Предопределенные константы и их использование
Заключение
Глава 11. Выражения в PHP
11.2. Скалярные и нескалярные выражения в PHP
11.3. Регулярные выражения PHP/FI2 и выражения присваивания
11.4. Выражения сравнения в PHP
11.5. Совмещенные выражения
11.6. Выражения условных операторов
11.7. Логические значения выражений
11.8. Счетчик посещений
Заключение
Глава 12. Арифметические операции в PHP
12.2. Одноместные операции в PHP
12.3. Двухместные операции в PHP
12.4. Арифметические операции в PHP
12.5. Операции назначения в PHP
12.6. Поразрядные операции в PHP
12.7. Операции сравнения в PHP
12.8. Операции контроля ошибок в PHP
12.9. Логические операции в PHP
12.10. Строковые операции в PHP
Заключение
Глава 13. Структуры управления данными в PHP
13. 7. Конструкция if в PHP
13.8. Конструкция if … else в PHP
13.9. Конструкция elseif в PHP
13.10. Альтернативный синтаксис для управляющих структур
13.11. Конструкция switch в PHP
13.12. Операторы цикла в PHP
13.14. Конструкция do … while в PHP
13.15. Конструкция for в PHP
13.16. Конструкция foreach в PHP
13.17. Операторы перехода в PHP
13.19. Оператор continue в PHP
13.20. Оператор возврата return в PHP
13.21. Включение исходного кода текста, содержащегося в файле
13.22. Оператор require()
13.23. Оператор include() в PHP
13.24. Оператор require_once()
13.25. Оператор include_once()
Заключение
Глава 14. Базовые концепции функций в PHP
Глава 15. Классы и объекты в PHP
15.5. Синтаксис классов в PHP
15.6. Данные класса в PHP
15.7. Методы класса в PHP
15.8. Задания значений изменяющимся переменным в классах в PHP
15.9. Расширение классов в PHP
15.10. Работа с переменными класса в PHP
15.11. Манипуляция с именами в PHP
15.12. Манипуляция уровнем сложности при работе с классами в PHP
15.13. Указатель на самого себя $this
15.14. Замечания по объектной терминологии в PHP
15.15. Ссылки внутри конструктора
15.16. Демонстрационная программа
Заключение
Часть III. Особенности реализации языка
Глава 16. Обработка ошибок в PHP
16.2. Подавление ошибок при обращении к функциям в PHP
Заключение
Глава 17. Идентификация в РНР
17.2. Основные концепции при программировании авторизации
17.3. Авторизация посетителей сайта
Заключение
Глава 18. Загрузка файлов по HTTP
18.2. Скрипты для обработки принимаемых данных
18.3. Возможные трудности
Заключение
Глава 19. Эффективная работа в РНР при сетевом соединении с Web-сервером
Часть IV. PHP-функции
20.2. Вычисления матриц
20.3. Функции возвращения
20.4. Применение вызовов в PHP
20.5. Функции объединения
20.6. Сортировка массивов в PHP
20.7. Вытеснение элементов из массива в PHP
20. 8. Получение элементов согласно внутреннему указателю массива
20.9. Функции среза элементов массива в PHP
Заключение
Глава 21. Функции обнаружения орфографических ошибок в PHP
21.1. Функции ispell, aspell и pspell
21.2. Краткий обзор концепций функций aspell
21.3. Особенности функций pspell
21.4. Создание конфигурации
21.5. Вызов файлов контроля синтаксиса
21.6. Списки слов проверки орфографии и принципы работы с ними в PHP
21.7. Функции непосредственной проверки орфографии в PHP
21.8. Функция игнорирования слов определенной длины
Заключение
Глава 22. Математические функции и функции произвольной точности (ВС) в PHP
22.2. Функции произвольной точности (ВС-функции)
Заключение
Глава 23. Функции даты/времени и работы с календарем в PHP
23.2. Функции даты и времени в PHP
23.3. Практическое применение функций даты и времени в PHP
Заключение
Глава 24. Функции работы с классами и объектами в PHP
24.2. Вызов методов пользователя классов
24. 3. Проверка классов в PHP
24.4. Возврат параметров класса в PHP
24.5. Возврат массива параметров объекта в PHP
24.6. Определение существующих классов в PHP
24.7. Программирование при помощи функций работы с классами в PHP
Заключение
Глава 25. Функции для манипуляций со строками в PHP
25.1. Функции удаления пробелов
25.2. Работа с ASCII-кодами в PHP
25.3. Шифрование строк
25.4. Функции вывода строк на печать
25.5. Деление и соединение строк
25.6. Работа с кодом HTML в PHP
25.7. Доступ с операциями замены строк или подстрок, сравнение строк в PHP
25.8. Операции поиска символов
25.9. Перевод строк в верхний и нижний регистры
25.10. PHP: Перевод строки в другую кодовую таблицу
Заключение
Глава 26. Функции работы с файлами в PHP
26.2. Копирование файлов в PHP
26.3. Основные операции над файлами в PHP
26.4. PHP: Чтение и проверка файлов
26.5. PHP: Определение атрибутов файлов
26.6. PHP: Создание и удаление директории
26. 7. PHP: Доступ к строке файлового пути
26.8. PHP: Получение информации о файле
26.9. PHP: Создание уникального имени
26.10. PHP: Установка времени модификации файла
26.11. PHP: Разные функции работы с файлами
26.12. PHP: Пример программирования
Заключение
Глава 27. Работа с электронной почтой в РНР
27.1. PHP: Функция отправления почты
27.2. PHP: Отправление почты с использованием дополнительных заголовков
27.3. PHP: Отправление почты нескольким адресатам
27.4. PHP: Принципы программирования
Заключение
Глава 28. PHP: Операции потокового ввода-вывода
28.2. PHP: Включение буфера, пересылка и очистка
28.3. PHP: Возврат значений буфера вывода
28.4. PHP: Функция работы с кодированными страницами
Заключение
Глава 29. PHP: Функции регулярных выражений и правила их формирования
Заключение
Глава 30. PHP: Функции семафоров и разделяемой памяти
Заключение
Глава 31. Сессии в РНР
31.2. Работа с сессиями в PHP
31. 3. PHP: Практическое применение сессий
31.4. PHP: Безопасность
Заключение
Глава 32. Принципы работы с базой данных MySQL
32.1. Установка MySQL
32.2. Функции получения доступа
32.3. Функции открытия и закрытия соединений
32.4. Функции возврата сообщений
32.5. Функция создания БД
32.6. Переход на указанную строку
32.7. Вызов строки результатов БД
32.8. Списки потоков записи на сервере
32.9. Практическая реализация
Заключение
Глава 33. Практическое применение РНР
33.2. Оптимизатор кода HTML
Приложение А. PHP: Список опций конфигураций
Приложение С. PHP: Сообщения об ошибках

Переменный объем

Область видимости переменной — это контекст, в котором она определена. По большей части все переменные PHP имеют только одну область видимости. Эта единая область охватывает также включенные и обязательные файлы. Для пример:

Здесь переменная $a будет доступна во включенном b. inc. сценарий. Однако в пользовательских функциях локальная функция вводится размах. Любая переменная, используемая внутри функции, по умолчанию ограничено областью действия локальной функции. Для пример:

Этот скрипт не будет выводить никакого вывода, потому что оператор эха ссылается на локальную версию переменной $a, и она не была присвоено значение в пределах этой области. Вы можете заметить, что это немного отличается от языка C в том, что глобальные переменные в C автоматически доступны для функций, если специально переопределяется локальным определением. Это может вызвать некоторые проблемы в что люди могут непреднамеренно изменить глобальную переменную. В PHP глобальные переменные должны быть объявлены глобальными внутри функции, если они будут использоваться в этой функции. Пример:

Приведенный выше скрипт выведет «3». Объявив $a и $b global внутри функции, все ссылки на любую переменную будет относиться к глобальной версии. Количество не ограничено глобальных переменных, которыми можно манипулировать функция.

Второй способ доступа к переменным из глобальной области видимости — использование специальный PHP-массив $GLOBALS. Предыдущий пример может переписать как:

Массив $GLOBALS — это ассоциативный массив с именем глобальная переменная, являющаяся ключом и содержимым этой переменной являющееся значением элемента массива.

Еще одной важной особенностью области видимости переменных является статические переменные. Статическая переменная существует только в локальной области действия функции, но не теряет своего значения когда выполнение программы выходит из этой области. Рассмотрим следующее пример:

Эта функция совершенно бесполезна, так как каждый раз, когда она вызывается устанавливает $a в 0 и печатает «0». $a++, который увеличивает переменная не имеет смысла, так как как только функция выходит переменная $a исчезает.

Оставить комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *