Перейти к содержимому

Фотография

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

php программирование переменные

  • Авторизуйтесь для ответа в теме
В этой теме нет ответов

#1 GoodX

GoodX

    Свой человек

  • Клиент Info-DVD.Ru
  • PipPipPipPipPip
  • 533 сообщений
178
Очень хороший
  • Пол:Мужчина

Отправлено 02 Сентябрь 2012 - 19:05

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

Приступим к обсуждению первого вопроса.

Итак, по области видимости все переменные можно структурировать, как локальные и глобальные.

Локальные переменные – это переменные, доступ к которым может быть осуществлен только в каком-то конкретном месте. Например, все переменные, которые объявлены внутри функции – локальные. Это значит, что обратиться к ним можно только внутри этой самой функции. Чтобы убедиться в этом «прощупайте», как работает следующий код:

clip_image001.png

Здесь мы создали небольшую функцию, задача которой просто объявить переменную $a со значением “Привет!», и вывести эту переменную на экран. Далее после объявленной функции мы вызываем ее, что приводит к тому, что на экран выводится значение «Привет!». Выведет ли это значение последняя строчка кода еще раз? Нет! Потому что любая переменная, объявленная внутри функции – локальна, и не видна, нигде, кроме как внутри блока функции.
Попробуйте выполнить теперь следующий код:

clip_image002.png

Он выводит на экран следующую строку: «Привет! Пока!». Как видим из-за локальности объявленных внутри функции переменных, мы можем не переживать по поводу уникальности имени этих переменных. Даже если в коде уже присутствуют переменные с тем же именем, ничто не мешает нам объявить их и внутри функции. Дело в том, что при объявлении переменной в функции, в оперативной памяти выделяется отдельная область для этих переменных, которая никоим образом не пересекается с основной областью, где хранятся все остальные данные.

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

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

clip_image003.png

Суть работы объявленной функции заключается в том, чтобы объявить переменную $a и присвоить ей значение 10. Далее функция увеличивает значение $a на единицу, и в следующей строке выводит ее на экран. Значит, на экран должно быть выведено число 11. Далее в коде мы дважды обращаемся к объявленной функции, и получаем в итоге два числа 11. Если бы локальная переменная сохраняла свое значение на протяжении всего кода программы, то мы бы получили значения: 11 и 12.

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

Однако при необходимости мы можем это изменить. Мы можем заставить «помнить» уже инициализированные переменные, путем использования ключевого слова static. Это слово говорит интерпретатору о том, что инициализировать объявленную в функции переменную нужно только один раз. При каждом последующем обращении к функции, переменная будет использована с тем значением, которая она имела при предыдущем выполнении кода функции. Это может звучать немного запутанно, но при просмотре результатов работы следующего простого кода все становится на свои места:

clip_image004.png

Теперь этот код выведет числа 11 и 12. Это произошло потому, что интерпретатор «знает», что переменная $a уже объявлена, и пропускает строку с ключевым словом static. Таким образом, в тот момент, когда начал выполняться код $a++, $a была равна уже не 10, а 11 вследствие выполнения функции в предыдущий раз. Если теперь в любом месте кода повторно вызывать эту функцию, то переменная $a всегда будет увеличена на единицу.

Что же такое глобальные переменные? Это переменные, которые помещены в системную переменную $_GLOBALS, и доступ к которым возможен из любого участка кода. Все переменные, которые объявляются вне функции – глобальные. К ним можно обратиться из любого участка кода просто по имени.

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

Для того, чтобы заставить функцию видеть нужные нам переменные, можно использовать обращение к элементу массива $GLOBALS. Либо перед объявлением переменной вставить ключевое слово global. Однако лучше не использовать эти возможности, и минимизировать область видимости переменных. Это сделает работу с кодом гибче. Проще будет вносить в него изменения. Если вы хотите, чтобы функция "видела» объявленные вне ее некоторые переменные, лучше всего передавать их в качестве параметров функции (вспомните, для чего мы после названия функции пишем скобочки)
В конце этого урока хотелось поделиться с вами приятной информацией. Когда вам необходимо добавить в свой код тот или иной функционал, и вы собираетесь разработать для этого свою функцию, помните, что большинство велосипедов уже изобретено. И никто не мешает вам их использовать повторно. Например, сам язык PHP уже содержит в себе огромное множество всевозможных функций. И для работы с ними, вам даже не придется вставлять их код (он уже и так прописан в ядре PHP). Вам нужно просто найти название той или иной функции, и вставить его в код своей программы.

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

Все статьи этой серии:

Сообщение отредактировал GoodX: 04 Сентябрь 2012 - 02:34

  • 0

На правах рекламы





Темы с аналогичным тегами php, программирование, переменные

Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 скрытых пользователей