Общий
термин идентификатор применяется к переменным, функциям и другим объектам, определяемым
пользователем. Идентификаторы РНР должны удовлетворять нескольким условиям: Идентификатор
состоит из одного или нескольких символов и начинается с буквы или символа подчеркивания.
Идентификатор может содержать только буквы, цифры, символы подчеркивания и другие
ASCII-символы с кодами от 127 до 255. Примеры: Допустимые идентификаторы
Недопустимые идентификаторы my_function This&that Size
!counter _someword 4ward В идентификаторах учитывается регистр
символов. Следовательно, переменная с именем $recipe отличается от переменных
с именами $Recipe, $rEciPe и $recipE.
Длина идентификаторов не ограничивается.
Это удобно, поскольку программист может точно описать смысл идентификатора в его
имени. Идентификатор не может совпадать с каким-либо из стандартных ключевых
слов РНР. Переменные В примерах, приведенных
выше, я попутно показал, как происходит присваивание и изменение значений переменных.
И все же стоит четко сформулировать правила объявления переменных и выполнения
операций с ними. Ниже приводится подробное описание этих правил. Объявление
переменных Переменная представляет собой именованную область памяти, содержащую
данные, с которыми можно выполнять операции во время выполнения программы. Имена
переменных всегда начинаются со знака доллара, $. Ниже приведены примеры допустимых
имен переменных: $соlоr $operating_system $_some_variable $model Имена
переменных должны соответствовать тем же условиям, что и идентификаторы. Другими
словами, имя переменной начинается с буквы или символа подчеркивания и состоит
из букв, символов подчеркивания, цифр или других ASCII-символов в интервале от
127 до 255. Следует заметить, что переменные в РНР, как и в языке Perl,
не требуют специального объявления. Вместо этого переменная объявляется при первом
ее использовании в программе. Более того, тип переменной косвенно определяется
по типу хранящихся в ней данных. Рассмотрим следующий пример: $sentence
= "This is a sentence."; // $sentence интерпретируется как строка $price
= 42.99: // $price интерпретируется как вещественное число $weight = 185;
// $weight интерпретируется как целое число Переменные могут объявляться
в любой точке сценария РНР, однако от расположения объявления зависит то, откуда
можно обращаться к данной переменной. Область видимости переменных Область
видимости (scope) определяется как область доступности переменной в той программе,
в которой она была объявлена. В зависимости от области видимости переменные РНР
делятся на четыре типа: локальные переменные; параметры функций; глобальные
переменные; статические переменные. Локальные переменные Переменная,
объявленная внутри функции, считается локальной; другими словами, на нее можно
ссылаться только в этой функции. При любом присваивании вне функции будет использоваться
совершенно другая переменная, которая не имеет ничего общего (кроме имени) с переменной,
объявленной внутри функции. При выходе из функции, в которой была объявлена локальная
переменная, эта переменная и ее значение уничтожаются. Основное достоинство
локальных переменных - отсутствие непредвиденных побочных эффектов, связанных
со случайной или намеренной модификацией глобальной переменной. Рассмотрим следующий
пример: $х = 4; function assignx () { $х = 0; print
"\$x inside function is $x. <br>"; } assignx(); print
"\$x outside of function is $x. <br>"; При выполнении этого
фрагмента выводится следующий результат: $х inside function is 0. $х
outside of function is 4. Как видите, программа выводит два разных значения
переменной $х. Дело в том, что переменная $х внутри функции assignx имеет локальную
природу, и изменение ее значения никак не отражается на значении, существующем
за пределами этой функции. Справедливо и обратное - модификация $х за пределами
функции никак не отражается на локальных переменных функции assignx(). Параметры
функций В РНР, как и во многих других языках программирования, любые параметры,
передаваемые функции при вызове, должны быть объявлены в заголовке функции. Хотя
параметрам присваиваются аргументы, переданные извне, после выхода из функции
они становятся недоступными. Параметры объявляются в круглых скобках после
имени функции. Объявление параметров практически не отличается от объявления типичной
переменной: // Функция умножает переданное значение на 10 и возвращает результат function
x10 ($value) { $value = $value * 10; return $value; } Хотя
вы можете обращаться к параметрам в той функции, в которой они были объявлены,
и выполнять с ними необходимые операции, после завершения функции параметры уничтожаются. Глобальные
переменные Глобальные переменные, в отличие от локальных, доступны в любой
точке программы. Но чтобы изменить значение глобальной переменной, необходимо
специально объявить ее как глобальную в соответствующей функции. Для этого перед
именем переменной ставится ключевое слово GLOBAL. Пример: $somevar = 15; function
addit() { GLOBAL $somevar; $somevar++; print "Somevar
is $somevar"; } addit(); Будет выведено значение $somevar,
равное 16. Допустим, вы забыли включить следующую строку: GLOBAL $somevar; В
этом случае $somevar будет присвоено значение 1, поскольку эта переменная будет
считаться локальной по отношению к функции addit( ). Локальная переменная по умолчанию
инициализируется 0, а затем к ней прибавляется 1; таким образом, будет выведено
значение 1. Альтернативный способ объявления глобальных переменных связан
с использованием массива РНР $GLOBALS( ). Давайте вернемся к предыдущему примеру
и воспользуемся этим массивом для объявления глобальной переменной $somevar: $somevar
= 15; function addit() { $GLOBALS["somevar"]; $somevar++;
} addit(); print "Somevar is $somevar"; Каким
бы способом ни обеспечивалась глобальная видимость переменной, помните, что неосторожное
использование глобальных переменных нередко приводит к неожиданным результатам,
причиняющим немало хлопот программистам. Таким образом, хотя глобальные переменные
очень удобны, при их использовании необходима умеренность. Статические переменные Последний
тип видимости переменных называется статическим. В отличие от переменных, объявленных
параметрами и уничтожаемых при выходе из функции, статическая переменная сохраняет
свое значение при повторном вызове. Для объявления статической переменной перед
ее именем ставится ключевое слово STATIC: STATIC $somevar; Рассмотрим
пример: function keep_track() { STATIC $count = 0; $count++; print
$count; print "<br>"; } keep_track(); keep_track();
keep_track(); Как будут выглядеть результаты работы этого сценария?
Если бы переменная $count не была объявлена статической (то есть являлась локальной),
результат выглядел бы так: 1 1 1 Но поскольку переменная
$count является статической, при каждом вызове функции будет сохраняться ее предыдущее
значение, поэтому результат будет таким: 1 2 3 Статические
переменные особенно удобны при написании рекурсивных функций - особого класса
функций, которые многократно вызывают сами себя до выполнения некоторого условия.
Рекурсивные функции рассматриваются в главе 4. |