Главные новости

PHP переменные

В этой главе:

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

При использовании переменных необходимо учитывать следующие правила:

  • В PHP не нужно объявлять переменную перед тем как начать её использовать.
  • Переменные в PHP представлены знаком доллара с последующим именем переменной.
  • Имена переменных чувствительны к регистру символов, это означает, что имена переменных $myVar, $MYVAR или $MyVar будут считаться, как имена трёх различных переменных.

Инициализация — это присвоение начального значения переменной. Присвоить какое-либо значение переменной можно с помощью оператора присваивания, который обозначается символом равно (=):

$str = 'строка1, '; $Str = 'строка2'; echo $str, $Str;

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

$x = 10; // Сначала присваивается число $x = "текст"; // Затем присваивается строка

Так как вместо имени переменной подставляется её значение, можно копировать значение из одной переменной в другую:

$num1 = 10; $num2 = $num1; // Тоже самое, что и $num2 = 10;

В этом примере переменной $num1 присваивается число 10. Затем переменной $num2 присваивается значение переменной $num1. Несмотря на то, что переменные $num1 и $num2 имеют одинаковое значение, каждая из них содержит собственную копию числа 10, поэтому изменение значения одной из них не повлияет на другую:

<?php $num1 = 10; $num2 = $num1; echo '$num1: '. $num1; // 10 echo '<br>$num2: ' . $num2; // 10 $num1 = 20; echo '<br>$num1: ' . $num1; // 20 echo '<br>$num2: ' . $num2; // 10 ?>

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

  • При работе со строками — пустую строку.
  • При работе с числами — число нуль.
  • Там, где ожидается булево значение — FALSE.
  • При работе с переменной в качестве массива — пустой массив.
  • При работе с переменной в качестве объекта — объект типа stdClass.
  • Без контекста использования — специальное значение NULL.
// При работе со строками $str = $str . 'abc'; // Тоже самое, что и '' . 'abc'
// При работе с числами $num = $num + 25; // Тоже самое, что и 0 + 25
// Там, где ожидается булево значение $num = $bool ? 1 : 2; // Тоже самое, что и FALSE ? 1 : 2;
// При работе с переменной в качестве массива $arr[3] = "abc"; // Тоже самое, что и $arr = [3 => "abc"];
// При работе с переменной в качестве объекта $obj->foo = 'abc'; // new stdClass; $obj->foo = 'abc';
// Без контекста использования echo gettype($x); // NULL

Зачем нужны переменные?

Переменные помогают сделать программный код понятнее. Рассмотрим небольшой пример:

$total_price = 2.42 + 4.33; // Общая цена

Имеющиеся здесь числа могут означать что угодно. Чтобы стало понятнее, что здесь суммируется, можно присвоить 2.42 в качестве значения переменной $candy_price (цена конфет), а 4.33 — в качестве значения переменной $oil_price (цена масла):

$total_price = $candy_price + $oil_price;

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

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

Переменные переменных

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

Чтобы использовать значение переменной в качестве имени переменной, необходимо поставить дополнительный знак доллара перед именем переменной, зачение которой будет использоваться в качестве имени:

<?php $x = "name"; $$x = "Вася"; // Вместо $x подставляется name и создаётся новая переменная $name echo $name; // "Вася" ?>

Ссылки

Ссылка является специальным значением, которое ссылается непосредственно на область памяти, содержащую значение.

Ссылки позволяют создать две (и более) переменные указывающие на одно и тоже значение. Изменение значения в одной переменной отражается на другой переменной, и наоборот.

Чтобы присвоить ссылку, нужно добавить знак амперсанд (&) перед именем присваиваемой переменной:

<?php $x = 10;
$y = &$x; // $y теперь ссылается на ту же область памяти, что и $x
$y = 20;
echo $x; // 20
?>

Такой способ присвоения значений переменным называется присвоением по ссылке.

По ссылке допускается присваивать только переменные:

$num = 11; $foo = &$num; // Допустимо
$foo = &(4 * 9); // Не допустимо

Если переменной, объявленной внутри функции как global, будет присвоена ссылка, то эта ссылка будет видна только внутри функции. Чтобы избежать этого, нужно использовать массив $GLOBALS:

<?php $var1 = "Hello"; $var2 = ""; function foo($test) { global $var1, $var2; if (!$test) { $var2 = &$var1; // Видна только внутри функции echo '$var2 внутри функции: ', "$var2
"; } else $GLOBALS["var2"] = &$var1; // Видна в глобальном контексте } foo(false); echo '$var2: ' . "$var2
"; // $var2: '' foo(true); echo '$var2: ' . "$var2
"; // $var2: 'Hello' ?>

На самом деле запись global $var; является сокращением от $var = &$GLOBALS['var'];, то есть фактически локальной переменной $var просто присваивается ссылка на значение одноимённой глобальной переменной.