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 .
Читайте также:  Html три вертикальных блока

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

Для получения доступа к глобальной переменной вне функции достаточно просто написать ее имя. Но для получения доступа к глобальной переменной внутри функции, нужно сначала объявить переменную как глобальную в функции с помощью ключевого слова 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(); // Выводит "Привет, Зоя!" ?>

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

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

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

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

Читайте также:  Select count php postgresql

Для создания статической переменной в функции нужно использовать ключевое слово 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
Просмотров: 66083
Правила перепечатки

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 сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

Источник

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

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

Читайте также:  background-position

В 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();
?>

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

Источник

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