Курс PHP для начинающих - с нуля до джуниора за 2 месяца. Жми!
base04 28

Переменные и константы

Курс PHP для начинающих
Внимание! Данный урок устарел!
Переходите к новому уроку "Переменные в PHP".
Курс PHP для начинающих

Переменные

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

Ниже приведены наиболее важные сведения о переменных в языке PHP, которые следует знать:

  • Все переменные в языке PHP обозначаются префиксом в виде знака доллара ($).

  • Значением переменной является значение, присвоенное ей в последней по времени операции присваивания.

  • Присваивание значений переменным осуществляется с помощью операции присваивания; при этом переменная должна находиться слева от знака операции присваивания (=), а вычисляемое выражение — справа.

  • Переменные могут быть объявлены перед присваиванием им значений, но такое требование не является обязательным.

  • Переменные не имеют связанного с ними типа, отличного от типа своего текущего значения.

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

Имена всех переменных в языке PHP начинаются с префикса в виде знака $. Остальная часть имен переменных, находящаяся за начальным префиксом $, должна состоять из букв в коде ASCII (прописных и строчных), цифр (0-9) и символов подчеркивания (_). Кроме того, первым символом после знака $ не должна быть цифра.

Присваивание значений переменным

Операция присваивания значения переменной очень проста — достаточно лишь написать имя переменной, ввести после него один знак равенства (=), затем ввести выражение, значение которого требуется присвоить переменной:

Исходный код
$pi = 3 + 0.14159;   // Приближенное значение числа "пи"

Следует учитывать, что переменной присваивается результат выражения, а не само выражение. Например, после присваивания значения с помощью приведенного выше оператора невозможно определить, что значение, присвоенное переменной $pi, было получено путем сложения двух чисел.

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

Исходный код
$pi = "3 + 0.14159";

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

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

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

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

Как показано в приведенном ниже коде, переменную с неприсвоенным значением можно отличить даже от переменной, которой было присвоено значение, предусмотренное по умолчанию:

Исходный код
<?php
	 error_reporting(0);    // Отключим сообщения об ошибках
	 $set = 0;      // Переменной $set присвоено значение
	 // $unset; - эта переменная не задана
	 
	 if (isset($set)) echo 'Переменная $set инициализирована<br>';
	 if (isset($unset)) echo 'Переменная $unset инициализирована<br>';
	 
	 if ($set == $unset) echo '$set == $unset';
?>

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

Проверка присвоено ли значение переменной или нет

Переменной $unset никогда еще не присваивалось значение, поэтому она вырабатывает нулевое значение, когда ожидается число (как в проверке со сравнением на равенство, которое показывает, что две рассматриваемые переменные имеют одинаковое значение). Тем не менее функция IsSet позволяет провести различие между переменными $set и $unset.

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

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

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

Ниже показан расширенный пример использования глобальных и локальных переменных, показывающий их различия между собой:

Исходный код
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Основы PHP</title>
<?php
	$number = 25;    // Это глобальная переменная, ее можно использовать в последующих сценариях
?>
</head>

<body>
<?php
	echo $number;
	 
	function func1() {
		if (isset($number)) {     // В контексте функции переменной $number не существует
			echo '<br>Переменная $number существует<br>';
		}
		else {
			echo ('<br>Переменная $number не существует<br>');
		}
		
		// Внешнюю переменную можно сделать доступной внутри тела функции только
		// с использованием ключевого слова global
		global $number;
		if (isset($number)) {
			echo 'А теперь переменная $number существует и она равна '.$number.'<br>';
		}
		
		$local = 11;   // Это локальная переменная, ее можно использовать только в теле функции
	}
	
	func1();
?>
</body>
</html>

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

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

Исходный код
<?php
	// Определение функции
	function birthday(){
		// Определить переменную age как статическую
		static $age = 0;
		
		// Увеличить значение переменной age на 1
		$age = $age + 1;
		
		// Вывести значение статической переменной age
		echo "Вызов функции birhday: $age<br />";
	}
	
	// Присвоить переменной age значение 30
	$age = 30;
	
	// Вызвать функцию дважды
	birthday();
	birthday();
	
	// Вывести значение переменной age
	echo "Возраст: $age<br />";
?>

В результате исполнения этого фрагмента будет выведено:

Использование статической переменной

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

Начиная с версии PHP 4.0.1 суперглобальные переменные определены как массивы, их можно вызывать как внутри функций, так и внутри остального контекста программы. Старые суперглобальные переменные, носящие имена с префиксом $HTTP_* и расположенные не в массивах, по-прежнему существуют, но их не рекомендуется использовать из соображений безопасности. В таблице ниже приведен перечень суперглобальных массивов, появившихся в версии PHP 4.0.1:

Суперглобальные массивы в PHP
Имя переменной массива Описание
$GLOBALS Содержит все глобальные переменные, доступные локальному сценарию. Имена переменных используются как индексы массива
$_SERVER Содержит информацию об окружении веб-сервера
$_GET Содержит информацию о запросах GET (при отправке форм). Эти значения следует обязательно проверять перед использованием
$_POST Содержит информацию о запросах POST (другой тип отправки форм). Эти значения следует обязательно проверять перед использованием
$_COOKIE Содержит информацию о cookies HTTP
$_FILES Содержит информацию о файлах, загружаемых методом POST
$_ENV Содержит информацию об окружении сценариев
$_REQUEST Содержит информацию о пользовательском вводе. Эти значения следует обязательно проверять пред использованием. Вместо этого массива следует использовать $_GET или $_POST, т.к. они более специализированные
$_SESSION Содержит информацию из всех переменных, зарегистрированных в рамках сессии (сеанса пользователя)

Примером суперглобальной переменной может служить $_SERVER["PHP_SELF"]. Эта переменная содержит имя исполняемого сценария и входит в состав массива $_SERVER:

Использование переменной PHP_SELF
<?php
	// Выведет расположение текущего файла
	echo $_SERVER["PHP_SELF"];
?>

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

Курс PHP для начинающих

Константы

В программе вы можете определять константы. Значение константы, как следует из ее названия, не может изменяться во время исполнения программы. Константы определяют с помощью функции define(), которой в первом аргументе передается имя константы, а во втором – ее значение. Константы имеют глобальную область видимости и могут принимать значение любого элементарного (скалярного) типа данных, например строки или числа.

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

Если имя константы хранится в переменной или возвращается функцией, то чтобы получить значение константы, необходимо воспользоваться функцией constant(имя_константы). Эта функция получает имя константы в качестве аргумента и возвращает ее значение. Кроме того, с помощью функции get_defined_constants() можно получить список (в виде массива) всех определенных вами констант.

Отличия констант и переменных:

  • в именах констант принято использовать только заглавные буквы;

  • имена констант не начинаются со знака доллара ($);

  • определить константу можно только с помощью функции define, а не простым оператором присваивания;

  • константы определяются и доступны глобально;

  • после объявления константу нельзя переопределить или отменить;

  • константы могут иметь только скалярные значения (числа и строки).

В примере ниже показан порядок использования констант:

Использование констант в программе
<?php
	define("HELLO", "Привет, мир!");
	echo HELLO;
	$constant_name = "HELLO";
	echo constant($constant_name);
?>

Этот код дважды выведет значение константы HELLO. В константе полезно хранить значение, которое должно оставаться неизменным, например путь к файлу настроек.

PHP предоставляет несколько предопределенных констант, похожих на суперглобальные переменные. Примеры таких констант: константа __FILE__ – возвращает имя исполняющегося PHP-файла, константа __LINE__ – возвращает номер строки этого файла. Видно, что имя предопределенной константы начинается и заканчивается двумя символами подчеркивания. Эти константы удобно использовать для вывода сообщений об ошибках, поскольку с их помощью можно указать, при исполнении какой строки возникла ошибка.

Синтаксис языка PHP
Типы данных

Комментарии (0)

Результаты поиска по запросу

Система Orphus