Php переменная доступная во всех функциях

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

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

Примечания

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

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

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

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

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

User Contributed Notes 3 notes

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.

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 );
>

// You do need global in this special situation

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

Источник

Область видимости переменной

Область видимости переменной — это контекст, в котором эта переменная определена. В большинстве случаев все переменные PHP имеют только одну область видимости. Эта единая область видимости охватывает также включаемые (include) и требуемые (require) файлы. Например:

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

$a = 1 ; /* глобальная область видимости */

function test ()
<
echo $a ; /* ссылка на переменную локальной области видимости */
>

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

Ключевое слово global

Сначала пример использования global:

Пример #1 Использование global

function Sum ()
global $a , $b ;

Вышеприведенный скрипт выведет 3. После определения $a и $b внутри функции как global все ссылки на любую из этих переменных будут указывать на их глобальную версию. Не существует никаких ограничений на количество глобальных переменных, которые могут обрабатываться функцией.

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

Пример #2 Использование $GLOBALS вместо global

function Sum ()
$GLOBALS [ ‘b’ ] = $GLOBALS [ ‘a’ ] + $GLOBALS [ ‘b’ ];
>

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

Пример #3 Суперглобальные переменные и область видимости

function test_global ()
// Большинство предопределенных переменных не являются
// «супер», и чтобы быть доступными в локальной области
// видимости, функции требуют указания ‘global’.
global $HTTP_POST_VARS ;

echo $HTTP_POST_VARS [ ‘name’ ];

// Суперглобальные переменные доступны в любой области
// видимости и не требуют указания ‘global’.
// Суперглобальные переменные доступны, начиная с PHP 4.1.0, а
// использование HTTP_POST_VARS считается устаревшим.
echo $_POST [ ‘name’ ];
>
?>

Замечание:

Использование ключевого слова global вне функции не является ошибкой. Оно может быть использовано в файле, которые включается внутрь функции.

Использование статических (static) переменных

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

Пример #4 Демонстрация необходимости статических переменных

Эта функция довольно бесполезна, поскольку при каждом вызове она устанавливает $a в 0 и выводит 0. Инкремент переменной $a ++ здесь не играет роли, так как при выходе из функции переменная $a исчезает. Чтобы написать полезную считающую функцию, которая не будет терять текущего значения счетчика, переменная $a объявляется как static:

Пример #5 Пример использования статических переменных

Теперь $a будет проинициализирована только при первом вызове функции, а каждый вызов функции test() будет выводить значение $a и инкрементировать его.

Статические переменные также дают возможность работать с рекурсивными функциями. Рекурсивной является функция, вызывающая саму себя. При написании рекурсивной функции нужно быть внимательным, поскольку есть вероятность сделать рекурсию бесконечной. Вы должны убедиться, что существует адекватный способ завершения рекурсии. Следующая простая функция рекурсивно считает до 10, используя для определения момента остановки статическую переменную $count :

Пример #6 Статические переменные и рекурсивные функции

Замечание:

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

Пример #7 Объявление статических переменных

function foo () static $int = 0 ; // верно
static $int = 1 + 2 ; // неверно (поскольку это выражение)
static $int = sqrt ( 121 ); // неверно (поскольку это тоже выражение)

Замечание:

Статические объявления вычисляются во время компиляции скрипта.

Ссылки с глобальными (global) и статическими (static) переменными

Движок Zend Engine 1, лежащий в основе PHP 4, оперирует модификаторами переменных static и global как ссылками. Например, реальная глобальная переменная, внедренная в область видимости функции указанием ключевого слова global, в действительности создает ссылку на глобальную переменную. Это может привести к неожиданному поведению, как это показано в следующем примере:

function test_global_noref () global $obj ;
$obj = new stdclass ;
>

test_global_ref ();
var_dump ( $obj );
test_global_noref ();
var_dump ( $obj );
?>

Результат выполнения данного примера:

Аналогично ведет себя и выражение static. Ссылки не хранятся статично:

echo ‘Статический объект: ‘ ;
var_dump ( $obj );
if (!isset( $obj )) // Присвоить ссылку статической переменной
$obj = &new stdclass ;
>
$obj -> property ++;
return $obj ;
>

echo ‘Статический объект: ‘ ;
var_dump ( $obj );
if (!isset( $obj )) // Присвоить объект статической переменной
$obj = new stdclass ;
>
$obj -> property ++;
return $obj ;
>

$obj1 = get_instance_ref ();
$still_obj1 = get_instance_ref ();
echo «\n» ;
$obj2 = get_instance_noref ();
$still_obj2 = get_instance_noref ();
?>

Результат выполнения данного примера:

Статический объект: NULL
Статический объект: NULL

Статический объект: NULL
Статический объект: object(stdClass)(1) [«property»]=>
int(1)
>

Этот пример демонстрирует, что при присвоении ссылки статической переменной она не запоминается, когда вы вызываете функцию &get_instance_ref() во второй раз.

Источник

Область видимости переменных PHP

Область видимости переменных — это часть скрипта, в рамках которой переменная была определена и где к ней можно получить доступ.

В PHP имеется три области видимости переменных:

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

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

Пример

 function myTest() $A = 7; // локальная переменная 
echo "

Переменная A внутри функции: $A

";
>
myTest();

// использование A вне функции вызовет ошибку
echo "

Переменная A вне функции: $A

";
?>

В данном случае в функции myTest() определена локальная переменная $A. И из общего контекста мы не можем к ней обратиться, то есть написать echo $A; нельзя, так как область действия переменной $A ограничено функцией myTest(). Вне этой функции переменной $A не существует.

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

Переменная, объявленная вне функции, имеет ГЛОБАЛЬНУЮ ОБЛАСТЬ ПРИМЕНЕНИЯ и может быть доступна только вне функции:

Пример

 $A = 5; // глобальная переменная

function myTest() // использование A внутри этой функции вызовет ошибку
echo "

Переменная A внутри функции: $A

";
>
myTest();

echo "

Переменная A вне функции: $A

";
?>

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

Ключевое слово global

Иногда требуется, чтобы переменная была доступна везде, глобально. Подобные переменные могут хранить какие-то общие для всей программы данные. Для определения глобальных переменных используется ключевое слово global .

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

Пример

 $x = 7; 
$y = 5;

function myTest() global $x, $y;
$y = $x + $y;
>

myTest();
echo $y; // выведет 12
?>

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

PHP также хранит все глобальные переменные в массиве с именем $GLOBALS[index] . Индекс содержит имя переменной. Этот массив также доступен из функций и может использоваться для непосредственного доступа и обновления глобальных переменных.

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

Пример

 function test() $foo = "локальная переменная"; 
echo '$foo в глобальной области видимости: ' . $GLOBALS["foo"] . "\n";
echo '$foo в текущей области видимости: ' . $foo . "\n";
>

$foo = "глобальная переменная";
test();

?>

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

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

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

Для этого используйте ключевое слово static при первом объявлении переменной:

Пример

 function getCounter() static $x = 0; 
echo $x;
$x++;
>

getCounter();
getCounter();
getCounter();
?>

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

Источник

Читайте также:  Html регулярка для телефона
Оцените статью