Как объявить глобальную переменную php
Перейти к содержимому

Как объявить глобальную переменную php

  • автор:

Суперглобальные переменные

Некоторые предопределённые переменные в PHP являются «суперглобальными», что означает, что они доступны в любом месте скрипта. Нет необходимости использовать синтаксис global $variable; для доступа к ним в функциях и методах.

Примечания

Замечание: Доступность переменных

По умолчанию все суперглобальные переменные доступны всегда, однако существуют настройки, которые могут на это влиять. За дальнейшей информацией обращайтесь к описанию директивы variables_order.

Замечание: Переменные переменных

Суперглобальные переменные не могут быть использованы в качестве переменных переменных внутри функций и методов.

Смотрите также

  • Область видимости переменной
  • Директива variables_order
  • «Фильтрация данных»

User Contributed Notes 3 notes

10 years ago

Since PHP 5.4, you cannot use a superglobal as the parameter to a function. This causes a fatal error:

function foo($_GET) // whatever
>

It’s called «shadowing» a superglobal, and I don’t know why people ever did it, but I’ve seen it out there. The easy fix is just to rename the variable $get in the function, assuming that name is unique.

There was no deprecation warning issued in previous versions of PHP, according to my testing, neither in 5.3 nor 5.2. The error messages in 5.4 are:
Fatal error: Cannot re-assign auto-global variable _GET in.
Fatal error: Cannot re-assign auto-global variable _COOKIE in.
etc.

9 months ago

two bugs fixed in Mife’s comment, but then it works:

// You do need global in this special situation
function get_var ( $varname ) global $ $varname ;
var_dump ( $ $varname );
>

4 years ago

// You do need global in this special situation

function get_var($varname) global $$varname;
echo $$varname;
>

  • Copyright © 2001-2024 The PHP Group
  • My PHP.net
  • Contact
  • Other PHP.net sites
  • Privacy policy

$GLOBALS

Ассоциативный массив ( array ), содержащий ссылки на все переменные, определённые в данный момент в глобальной области видимости скрипта. Имена переменных являются ключами массива.

Примеры

Пример #1 Пример использования $GLOBALS

function test () $foo = «локальная переменная» ;

echo ‘$foo в глобальной области видимости: ‘ . $GLOBALS [ «foo» ] . «\n» ;
echo ‘$foo в текущей области видимости: ‘ . $foo . «\n» ;
>

$foo = «Пример содержимого» ;
test ();
?>

Вывод приведённого примера будет похож на:

$foo в глобальной области видимости: Пример содержимого $foo в текущей области видимости: локальная переменная

Внимание

Начиная с PHP 8.1.0, доступ на запись ко всему массиву $GLOBALS больше не поддерживается:

Пример #2 запись всего $GLOBALS приведёт к ошибке

// Генерирует ошибку во время компиляции:
$GLOBALS = [];
$GLOBALS += [];
$GLOBALS =& $x ;
$x =& $GLOBALS ;
unset( $GLOBALS );
array_pop ( $GLOBALS );
// . и любые другие операции записи/чтения-записи в $GLOBALS
?>

Примечания

Замечание:

Это «суперглобальная» или автоматическая глобальная переменная. Это просто означает, что она доступна во всех контекстах скрипта. Нет необходимости выполнять global $variable; для доступа к ней внутри метода или функции.

Замечание: Доступность переменной

В отличие от всех остальных суперглобальных переменных, $GLOBALS всегда доступна в PHP.

Замечание:

Начиная с PHP 8.1.0, массив $GLOBALS теперь является доступной только для чтения копией глобальной таблицы символов. То есть глобальные переменные не могут быть изменены с помощью его копии. Ранее массив $GLOBALS исключался из обычного поведения массивов PHP по значению и глобальные переменные можно было изменить с помощью его копии.

// До PHP 8.1.0
$a = 1 ;
$globals = $GLOBALS ; // Как будто бы по значению копии
$globals [ ‘a’ ] = 2 ;
var_dump ( $a ); // int(2)

// Начиная с PHP 8.1.0
// больше не изменяет значение $a. Предыдущее поведение нарушало семантику по значению
$globals = $GLOBALS ;
$globals [ ‘a’ ] = 1 ;

// Чтобы восстановить предыдущее поведение, повторите его копию и присвойте каждому свойству значение $ GLOBALS.
foreach ( $globals as $key => $value ) $GLOBALS [ $key ] = $value ;
>
?>

PHP: Глобальные переменные

Глобальные переменные позволяют вам пересекать границы между функциями, чтобы обращаться к значениям переменных. Ключевое слово global указывает, что данная переменная будет той же самой переменной повсюду в программе, то есть глобальной переменной. Изменение глобальной переменной внутри функции можно наблюдать за ее пределами. Не существует никаких ограничений на количество глобальных переменных, которые могут обрабатываться функцией:

 // вызываем функцию birth(); //выводим значение переменной age echo $age; ?>

В результате исполнения этого кода будет выведено: 31.

Глобальные переменные следует использовать в редких случаях, поскольку легко изменить значение переменной по ошибке, не предусмотрев последствий. Ошибки такого типа бывает очень сложно обнаружить. Кроме того, когда мы будем изучать функции подробнее, вы узнаете, что есть и другой способ передачи значений в функции и получения результатов их работы. Все это означает, что в действительности вы не должны использовать глобальные переменные.

Есть еще второй способ доступа к переменным глобальной области видимости — использование специального, определяемого PHP массива $GLOBALS :

 Sum(); echo $b; ?>

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

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

С этой темой смотрят:

  • Локальные переменные
  • Статические переменные
  • Суперглобальные переменные

Копирование материалов с данного сайта возможно только с разрешения администрации сайта
и при указании прямой активной ссылки на источник.
2011 – 2024 © puzzleweb.ru | razumnikum.ru

Как объявить глобальную переменную php

При использовании переменных и функций следует учитывать области видимости переменных. Область видимости задает область действия, доступности данной переменной.

Переменные в блоках цикла и условных конструкций

Блоки циклов и условных конструкций не образуют отдельной области видимости, и переменные, определенные в этих блоках, мы можем использовать вне этих блоков:

$condition = true; if($condition) < $name = "Tom"; >echo $name; // Tom
$i = 6; switch($i) < case 5: $name = "Tom"; break; case 6: $name = "Bob"; break; default: $name = "Sam"; break; >echo $name; // Bob

Локальные переменные

Локальные переменные создаются внутри функции. К таким переменным можно обратиться только изнутри данной функции. Например:

 showName(); echo $name; // так написать нельзя, так как // переменная $name существует // только внутри функции showName( ?>

В данном случае в функции showName() определена локальная переменная $name . Соответственно обратиться в этой переменной мы можем только внутри функции showName() , но не вне ее.

То же самое относится и к параметрам функции: вне функции ее параметры также не существуют.

Статические переменные

На локальные переменные похожи статические. Они отличаются тем, что после завершения работы функции их значение сохраняется. При каждом новом вызове функция использует ранее сохраненное значение. Например:

 getCounter(); // counter=1 getCounter(); // counter=2 getCounter(); // counter=3 ?>

Чтобы указать, что переменная будет статической, к ней добавляется ключевое слово static . При трех последовательных вызовах функции getCounter() переменная $counter будет увеличиваться на единицу.

Если бы переменная $counter была обычной нестатической, то при каждом вызове функция getCounter() выводила бы 1.

Как правило, статические переменные служат для создания различных счетчиков, как в примере выше.

Глобальные переменные

Глобальные переменные по умолчанию не доступны внутри функции. Например:

 hello(); ?>

Данный код не будет работать, а интрепретатор PHP известит нас, что переменная $name не определена.

Тем не менее мы можем обратиться внутри функции к глобальной переменной. Для этого необходимо использовать ключевое слово global :

 hello(); // Hello Tom ?>

Для получения доступа к глобальной переменной в функции с помощью оператора global объявляется переменная с тем же именем:

global $name;

После этого к глобальной переменной $name можно будет обращаться внутри функции. При чем мы можем не только получать ее значение, но и изменить его:

 changeName(); echo $name; // Tomas ?>

В качестве альтернативы оператору global для обащения к глобальным переменным мы можем использовать встроенный массив $GLOBALS :

"; // изменяем значение переменной $name $GLOBALS["name"] = "Tomas"; > changeName(); echo "Новое имя: " . $name; ?>

Чтобы обратиться к глобальной переменной $name, применяется выражение $GLOBALS[«name»] — в квадратные скобки передается название переменной (без знака $). Результат работы скрипта:

Старое имя: Tom Новое имя: Tomas

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

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