PHP Global: глобальные переменные
В этой статье пойдет разговор о том, что такое глобальные переменные в PHP и чем они отличаются от локальных. Также читатель узнает о том, как использовать ассоциативный массив $GLOBALS вместо ключевого слова Global. Пояснения будут даны на конкретных примерах.
В языке программирования PHP существует понятие глобальных переменных (globally variables). Но для начала следует вспомнить о переменных локальных. Последние определены внутри пользовательской функции (внутри подпрограммы), причем на нее вы сможете ссылаться лишь в этой функции. Таким образом, локальная variable доступна лишь внутри той функции, в которой она определена (доступна в локальной области видимости).
Глобальные значения, в отличие от локальных, доступны всей программе целиком, куда также входят и подпрограммы (пользовательские функции).
Для языка программирования PHP все переменные, которые объявлены и задействуются в функции, локальны для функции (так обстоят дела по умолчанию). Таким образом, по дефолту возможность поменять значение переменной global в теле функции отсутствует.
Давайте представим, что мы в теле пользовательской функции PHP захотим применить переменную с именем, причем это имя будет идентично имени глобальной переменной, которая находится вне user function. В результате никакого отношения данная локальная variable к глобальной иметь не будет. В описанном только что случае в пользовательской функции будет создана local variable, причем с именем в PHP, которое будет идентично имени global variable, однако доступна такая переменная будет лишь внутри нашей пользовательской функции.
Все вышеописанное лучше пояснить на примере:
Сценарий кода выведет сначала 555, а потом 888. Чтобы избавиться от недостатка, продемонстрированного в function test (это не ошибка, а именно недостаток), в языке программирования PHP предусмотрена особая инструкция global. Эта инструкция дает возможность пользовательской функции взаимодействовать с глобальными переменными.
Рассмотрим этот принцип на очередном примере:
Скрипт с function sum выведет результат 15. Что тут произошло? После того, как $x и $y были определены внутри нашей функции в качестве global, все существующие ссылки на любую из этих статических переменных стали указывать уже на их глобальную версию. При данных обстоятельствах отсутствуют какие-либо ограничения на количество global variables, доступных к обработке с помощью user functions.
PHP и глобальные переменные. Массив $GLOBALS
Есть и другой способ, обеспечивающий доступ к глобальной области видимости. Он заключается в применении специального массива , определяемого PHP. Мы можем переписать предыдущий пример иначе, задействовав $GLOBALS:
$GLOBALS[«y»] = $GLOBALS[«x»] + $GLOBALS[«y»];
$GLOBALS является ассоциативным массивом, его ключ — это имя, его значение — это содержимое глобальной переменной. Важно обратить внимание на тот факт, что $GLOBALS может существовать практически в любой области видимости, что объясняется следующим образом: данный массив является суперглобальным.
Ниже расположен пример, который демонстрирует возможности использования суперглобальных переменных:
Хотите знать о PHP гораздо больше? Добро пожаловать на курс!
$GLOBALS
An associative array containing references to all variables which are currently defined in the global scope of the script. The variable names are the keys of the array.
Examples
Example #1 $GLOBALS example
function test () $foo = «local variable» ;
?php
echo ‘$foo in global scope: ‘ . $GLOBALS [ «foo» ] . «\n» ;
echo ‘$foo in current scope: ‘ . $foo . «\n» ;
>
$foo = «Example content» ;
test ();
?>
The above example will output something similar to:
$foo in global scope: Example content $foo in current scope: local variable
As of PHP 8.1.0, write access to the entire $GLOBALS array is no longer supported:
Example #2 writing entire $GLOBALS will result in error.
// Generates compile-time error:
$GLOBALS = [];
$GLOBALS += [];
$GLOBALS =& $x ;
$x =& $GLOBALS ;
unset( $GLOBALS );
array_pop ( $GLOBALS );
// . and any other write/read-write operation on $GLOBALS
?>?php
Notes
Note:
This is a ‘superglobal’, or automatic global, variable. This simply means that it is available in all scopes throughout a script. There is no need to do global $variable; to access it within functions or methods.
Note: Variable availability
Unlike all of the other superglobals, $GLOBALS has essentially always been available in PHP.
Note:
As of PHP 8.1.0, $GLOBALS is now a read-only copy of the global symbol table. That is, global variables cannot be modified via its copy. Previously, $GLOBALS array is excluded from the usual by-value behavior of PHP arrays and global variables can be modified via its copy.
// Before PHP 8.1.0
$a = 1 ;
$globals = $GLOBALS ; // Ostensibly by-value copy
$globals [ ‘a’ ] = 2 ;
var_dump ( $a ); // int(2)
?php
// As of PHP 8.1.0
// this no longer modifies $a. The previous behavior violated by-value semantics.
$globals = $GLOBALS ;
$globals [ ‘a’ ] = 1 ;
// To restore the previous behavior, iterate its copy and assign each property back to $GLOBALS.
foreach ( $globals as $key => $value ) $GLOBALS [ $key ] = $value ;
>
?>
PHP5 Глобальные переменные — Суперглобальные массивы
Суперглобальный массивы были введены в PHP 4.1.0 и являются встроенными переменные, которые всегда доступны во всех областях.
PHP Глобальные переменные — суперглобальный массив
Несколько предопределенных переменных в PHP «суперглобальные», что означает, что они всегда доступны, независимо от области — и Вы можете получить к ним доступ из любой функции, класса или файла без необходимости делать что-либо особенное.
PHP Суперглобальные переменные:
- $GLOBALS
- $_SERVER
- $_REQUEST
- $_POST
- $_GET
- $_FILES
- $_ENV
- $_COOKIE
- $_SESSION
В этой главе будут описаны некоторые из суперглобальных массивах, а остальное будет объясняется в последующих главах.
PHP $GLOBALS
$GLOBALS — суперглобальная переменная PHP, которая используется для доступа к глобальным переменным из любого места в PHP скрипте (внутри функций или методах).
Все PHP глобальные переменные хранятся в массиве [index]. index содержит имя переменной.
В приведенном ниже примере показано, как использовать суперглобальную переменную $GLOBALS :
Пример
function addition() <
$GLOBALS[‘z’] = $GLOBALS[‘x’] + $GLOBALS[‘y’];
>
В приведенном выше примере, поскольку z является переменной, присутствующей в $GLOBALS как массив, он также доступен снаружи функции!
PHP $_SERVER
$_SERVER — суперглобальная переменная PHP, которая содержит сведения о заголовках, пути и расположения сценариев.
В приведенном ниже примере показано, как использовать некоторые из элементов в $_SERVER :
Пример
echo $_SERVER[‘PHP_SELF’];
echo «
«;
echo $_SERVER[‘SERVER_NAME’];
echo «
«;
echo $_SERVER[‘HTTP_HOST’];
echo «
«;
echo $_SERVER[‘HTTP_REFERER’];
echo «
«;
echo $_SERVER[‘HTTP_USER_AGENT’];
echo «
«;
echo $_SERVER[‘SCRIPT_NAME’];
?>?php>
В следующей таблице перечислены наиболее важные элементы, которые могут находится внутри $_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» , данные формы отправляются в файл, указанный в атрибуте действия тега . В этом примере мы укажим на сам файл для обработки данных формы. Если Вы хотите использовать другой PHP файл для обработки данных формы, заменить на имя файла выбор. Затем Вы можем использовать суперглобальную переменную $_REQUEST для сбора значение входного поля:
Пример
if ($_SERVER[«REQUEST_METHOD»] == «POST») // собрать значение входного поля
$name = $_REQUEST[‘fname’];
if (empty($name)) echo «Имя пустое»;
> else echo $name;
>
>
?>
PHP $_POST
PHP $_POST широко используется для сбора данных формы после отправки формы HTML с method=»post» . $_POST также широко используется для передачи переменных.
В примере ниже показана форма с полем ввода и кнопкой отправки. Когда пользователь отправляет данные, нажав кнопку «Submit» , данные формы отправляются в файл, указанный в атрибуте действия тега . В этом примере Вы укажите сам файл для обработки данных формы. Если вы хотите использовать другой PHP файл для обработки данных формы, заменить на имя файла выборачно. Затем мы можем использовать суперглобальную переменную $_POST для сбора значение входного поля:
Пример
if ($_SERVER[«REQUEST_METHOD»] == «POST») // собрать значение входного поля
$name = $_POST[‘fname’];
if (empty($name)) echo «Имя пустое»;
> else echo $name;
>
>
?>
PHP $_GET
PHP $_GET также может быть использован для сбора данных формы после отправки HTML формы с method=»get» .
$_GET может также собирать данные, отправленные в URL.
Предположим, у нас есть HTML страница, содержащая гиперссылку с параметрами:
Когда пользователь нажимает на ссылку «Тест $GET» , параметр «subject» и «web» отправляются в файл «test_get.php», затем вы можете получить доступ к их значениям в файле «test_get.php» с $_GET .
Пример ниже показывает код в файле «test_get.php»:
Пример
echo «Study» . $_GET[‘subject’] . » at » . $_GET[‘web’];
?>
Совет: Вы узнаете больше о $_POST и $_GET в главе Формы PHP.
Мы только что запустили
SchoolsW3 видео