PHP: Переменные

В этой главе:

  • Общие сведения

  • Присваивание по значению

  • Ссылочные переменные

  • Символические ссылки (переменные переменных)

  • Дополнительные сведения

  • Действия с переменными

Общие сведения

Для тех кто никогда раньше не программировал, переменные могут оказаться совершенно новым понятием. В переменной (variable) сохраняется некоторое значение, например текстовая строка "hello world" или целое число 1. После этого можно использовать переменную в любом месте программы, вместо того чтобы снова и снова впечатывать фактическое значение везде, где это потребуется, что может быть занятием весьма скучным и утомительным. Также переменная сильно может помочь в тех случаях, когда значение надо изменить в нескольких местах программы, например: вместо того, чтобы менять значения в нескольких местах, можно изменить только значение переменной, и там где она используется значения автоматически подставятся вместо имени переменной.

Переменные хранятся в определенных участках памяти компьютера, имеют символьные уникальные имена и могут хранить значения различных типов. Когда переменной присваивается значение, оно записывается в ячейку памяти, связанную с данным именем переменной. Присвоить значение переменной можно с помощью знака (=). Чтобы в программе обратиться к значению присвоенному переменной, надо просто написать $имя_переменной, а интерпретатор PHP вместо ее имени подставит значение, которое в ней хранится.

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

1
2
3
$имя_переменной;
// или
$имя_переменной = значение;

Давайте теперь немного подробнее рассмотрим, что означают эти записи. Переменные в PHP обозначаются знаком доллара ($), за которым должно следовать имя переменной, пример:$name_variable.

Имя переменной после знака доллара должно начинаться с буквы или символа подчеркивания и далее может состоять из букв, цифр и символов подчеркивания в любом количестве. Обратите внимание, что имена переменных чувствительны к регистру букв, то есть: $my_variable - это не тоже самое, что $my_Variable или $MY_VARIABLE, это три разных переменных, так как в именах использовали буквы с разным регистром:

1
2
3
4
5
6
7
8
9
10
<?php
 
  $var = 'Василий';
  $Var = 'Петр';
  echo "$var, $Var";      // выведет "Василий, Петр"
 
  $4site = 'not yet';     // неверно; начинается с цифры
  $_4site = 'not yet';    // верно; начинается с символа подчеркивания
 
?>

Присваивание по значению

По умолчанию, переменные всегда присваиваются по значению. Это означает, что, после того как одной переменной присвоено значение другой, изменение одной из них не влияет на другую. Единственное исключение из этого правила - копирование переменной ссылающейся на объект: в этом случае объект остается в единственном экземпляре, копируется лишь ссылка на него (об объектах будет написано позднее):

1
2
3
4
5
6
7
8
<?php
 
  $foo = 'дерево';     // Присваивает значение 'дерево'
  $bar = $foo;         // Присваивает переменной $bar значение переменной $foo
  $foo = 10;           // Присваивает $foo новое значение
  echo $bar;           // 'дерево': значение $bar не изменилось
 
?>

Ссылочные переменные

Помимо присваивания переменных по значению в PHP имеется иной способ присваивания значений переменным: присваивание по ссылке. На самом деле имена переменных указывают на место в памяти, где хранятся их значения. На одно и тоже место могут ссылаться несколько переменных. Если вас интересует адрес значения в памяти, а не само значение переменной, указать это можно с помощью знака амперсанда (&), т.е. для присваивания по ссылке, нужно просто добавить знак амперсанд (&) к началу имени присваиваемой (исходной) переменной. Это означает, что новая переменная просто будет ссылаться (иначе говоря, "становится псевдонимом" или "указывает") на значение оригинальной переменной. Изменения в новой переменной отражаются на оригинальной переменной, и наоборот:

1
2
3
4
5
6
7
8
9
<?php
 
  $foo = 'Боб';              // Присваивает $foo значение 'Боб'
  $bar = &$foo;              // Ссылка на значение переменной $foo через $bar.
  $bar = "Меня зовут $bar<br>"// Изменение $bar...
  echo $bar;
  echo $foo;                 // меняет и $foo.
 
?>

По ссылке могут быть присвоены только именованные значения (переменные):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
 
  $foo = 25;
  $bar = &$foo;      // Это верное присвоение.
  $bar = &(24 * 7);  // Неверно; ссылка на неименованное выражение.
 
  function test()    // это функция, но о них вы узнаете чуть позже
  {                  // функции также нельзя присваивать по ссылке
    return 25;
  }
 
  $bar = &test();    // Неверно.
 
?>

Символические ссылки (переменные переменных)

Символическая ссылка - это всего лишь строковая переменная, которая хранит имя другой переменной. Чтобы добраться до значения переменной, на которую указывает символическая ссылка, необходимо применить оператор разыменования - дополнительный знак $ перед именем ссылки. Давайте посмотрим это на примере:

1
2
3
4
5
6
7
8
9
10
<?php
 
  $red = 'красный';
 
  $color = 'red';
   
  echo $$color;        // Выведет значение переменной $red - красный
  $$color = 'черный'// присвоили переменной $red новое значение
 
?>

Чтобы использовать обычную строковую переменную в качестве ссылки нужно перед ней поставить дополнительный символ $. Это говорит интерпретатору о том, что надо взять не значение самой переменной $color, а значение переменной, имя которой хранится в качестве значения в переменной $color.

Дополнительные сведения

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

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

Если переменной изначально не было присвоено никакое значение, она считается неинициализированной. Неинициализированные переменные принимают значение по умолчанию в зависимости от их типа, который определяется из контекста их первого использования: по умолчанию неинициализированная (и без контекста использования) переменная имеет значение NULL, в контексте с булевым значение принимают значение FALSE, в контексте с целыми числами и вещественными - ноль, со строками - пустую строку (""), с объектами - создает новый объект stdClass, с массивами - создается пустой массив:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
 
  // var_dump - показывает информацию о переменной
  // echo - выводит одну или более строк на экран
 
  // Неинициализированная переменная без контекста вызова; выведет NULL
  var_dump($unset_var);
 
  // Булево применение; выведет 'false'
  echo($unset_bool ? "true\n" : "false\n");
 
  // Строковое использование; выведет 'string(3) "abc"'
  $unset_str .= 'abc'// ''.'abc'
  var_dump($unset_str);
 
  // Целочисленное использование; выведет 'int(25)'
  $unset_int += 25; // 0 + 25 => 25
  var_dump($unset_int);
 
  // Использование в качестве числа с плавающей точкой (float/double); выведет 'float(1.25)'
  $unset_float += 1.25; // 0 + 1.25
  var_dump($unset_float);
 
  // Использование в качестве массива; выведет array(1) {  [3]=>  string(3) "def" }
  $unset_arr[3] = "def"; // array() + array(3 => "def") => array(3 => "def")
  var_dump($unset_arr);
 
  // Использование в качестве объекта; создает новый объект stdClass
  // Выведет: object(stdClass)#1 (1) {  ["foo"]=>  string(3) "bar" }
  $unset_obj->foo = 'bar';
  var_dump($unset_obj);
   
?>

Действия с переменными

Вне зависимости от типа переменной, над ней можно выполнять три основных действия.

Присвоение значения

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

Проверка существования

Можно проверить существует ли (т.е. инициализирована ли) указанная переменная. Сделать это можно с помощью встроенной в PHP функции isset():

1
2
if(isset($myVar))
echo "переменная существует, ее значение: $myVar";

Если переменной в данный момент не существует (т.е. нигде ранее ей не присваивалось значение, либо же она была вручную удалена), то isset() возвращает false, в противном случае - true.

Удаление

Удаление переменной реализуется оператором unset(). После этого действия переменная удаляется и программа начинает выполняться так, как будто переменная еще не была инициализирована:

1

2

3

4

5

6

7

8

//инициализируем переменную "x"
$x = "hello";
 
echo $x;
//удаляем переменную "x"
unset($x);
//теперь переменная "x" не существует
echo $x;