Вывод глобальной переменной php

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

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

В языке программирования PHP существует понятие глобальных переменных (globally variables). Но для начала следует вспомнить о переменных локальных. Последние определены внутри пользовательской функции (внутри подпрограммы), причем на нее вы сможете ссылаться лишь в этой функции. Таким образом, локальная variable доступна лишь внутри той функции, в которой она определена (доступна в локальной области видимости).

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

Для языка программирования PHP все переменные, которые объявлены и задействуются в функции, локальны для функции (так обстоят дела по умолчанию). Таким образом, по дефолту возможность поменять значение переменной global в теле функции отсутствует.

Давайте представим, что мы в теле пользовательской функции PHP захотим применить переменную с именем, причем это имя будет идентично имени глобальной переменной, которая находится вне user function. В результате никакого отношения данная локальная variable к глобальной иметь не будет. В описанном только что случае в пользовательской функции будет создана local variable, причем с именем в PHP, которое будет идентично имени global variable, однако доступна такая переменная будет лишь внутри нашей пользовательской функции.

Читайте также:  Javascript copy object to object

Все вышеописанное лучше пояснить на примере:

Сценарий кода выведет сначала 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 гораздо больше? Добро пожаловать на курс!

Источник

Область видимости переменных PHP. Все, что вы хотели знать, но боялись спросить.

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

Когда приступаешь к изучению PHP и начинаешь работать с функциями и объектами, область видимости переменных вызывает некоторое смущение. К счастью правила PHP в этом отношении очень просты для понимания (в сравнении с другими языками программирования).

Что такое область видимости?

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

  • Глобальная — к переменным можно получить доступ в любом месте скрипта
  • Локальная — к переменным можно получить доступ только внутри функции, в которой они были определены

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

Переменные с глобальной областью видимости называются глобальными, а с локальной областью видимости — локальными.

Вот пример того, как работают глобальные и локальные переменные.

"; > sayHello(); echo "Значение \$globalName: '$globalName'
"; echo "Значение \$localName : '$localName'
"; ?>

При выполнении скрипт выведет:

Привет, Гарри! Значение $globalName: 'Зоя' Значение $localName : ''

В данном скрипте мы создали две переменных:

  • $globalName — это глобальная переменная
  • $localName — это локальная переменная, которая создана внутри функции sayHello() .

После создания переменной и функции скрипт вызывает sayHello() ,который выводит ‘Привет, Гарри!’ . Затем скрипт пытается вывести значения двух переменных с помощью функции echo . Вот что происходит:

  • Так как $globalName была создана вне функции, она доступна в любом месте скрипта, поэтому выводится ‘Зоя’ .
  • $localName будет доступна только внутри функции sayHello() . Так как выражение echo находится вне функции, PHP не дает доступа к локальной переменной . Вместо этого, PHP предполагает, что код будет создавать новую переменную с именем $localName , которая получит значение по умолчанию — пустую строку. вот почему второй вызов echo выводит значение » для переменной $localName .

Доступ к глобальным переменным внутри функции

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

Если не сделать этого, то PHP предполагает, что вы создаете или используете локальную переменную.

Вот пример скрипта, который использует глобальную переменную внутри функции:

"; global $globalName; echo "Привет, $globalName!
"; > sayHello(); ?>

При выполнении скрипт выведет:

Функция sayHello() использует ключевое слово global для объявления переменной $globalName как глобальной. После чего она может получить доступ к переменной и вывести ее значение ( ‘Зоя’ ).

Что такое суперглобалы?

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

Вот список суперглобалов, доступных в PHP версии 5.3:

  • $GLOBALS — список всех глобальных переменных в скрипте (исключая суперглобалов)
  • $_GET — содержит список всех полей формы, отправленной браузером с помощью запроса GET
  • $_POST — содержит список всех полей формы отправленной браузером с помощью запроса POST
  • $_COOKIE — содержит список всех куки, отправленных браузером
  • $_REQUEST — содержит все сочетания ключ/значение, которые содержатся в массивах $_GET, $_POST, $_COOKIE
  • $_FILES — содержит список всех файлов, загруженных браузером
  • $_SESSION — позволяет хранить и использовать переменные сессии для текущего браузера
  • $_SERVER — содержит информацию о сервере, такую как, имя файла выполняемого скрипта и IP адрес браузера.
  • $_ENV — содержит список переменных среды, передаваемых PHP, например, CGI переменные.

Если вы запустите выше приведенный скрипт с помощью строки URL http://www.example.com/script.php?yourName=Фред , то он выведет:

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

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

"; > sayHello(); // Выводит "Привет, Зоя!" ?>

Статические переменные: они находятся где-то рядом

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

В большинстве случаев это отлично работает. Таким образом функции самодостаточны и работают всегда одинаково при каждом вызове.

Однако, есть ситуации, когда было бы удобно создать локальную переменную, которая «помнит» свое значение между вызовами функции. Такая переменная называется .

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

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

 echo "Создаем некие виджеты. 
"; echo createWidget() . " мы уже создали.
"; echo createWidget() . " мы уже создали.
"; echo createWidget() . " мы уже создали.>
"; ?>

Но, так как переменная $numWidgets создается каждый раз при вызове функции, то мы получим следующий результат:

Создаем некие виджеты. 1 мы уже создали. 1 мы уже создали. 1 мы уже создали.

Но с использованием статической переменной, мы сможем сохранять значение от одного вызова функции к другому:

 echo "Создаем некие виджеты. 
"; echo createWidget() . " мы уже создали.
"; echo createWidget() . " мы уже создали.
"; echo createWidget() . " >мы уже создали.
"; ?>

Теперь скрипт выдаст ожидаемый результат:

Создаем некие виджеты. 1 мы уже создали. 2 мы уже создали. 3 мы уже создали.

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

Вот и все! Почаще обращайтесь к документации по PHP.

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: www.elated.com/articles/php-variable-scope-all-you-need-to-know/
Перевел: Сергей Фастунов
Урок создан: 25 Октября 2010
Просмотров: 66068
Правила перепечатки

5 последних уроков рубрики «PHP»

Фильтрация данных с помощью zend-filter

Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.

Контекстное экранирование с помощью zend-escaper

Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

Подключение Zend модулей к Expressive

Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

Совет: отправка информации в Google Analytics через API

Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

Подборка PHP песочниц

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

Источник

Оцените статью