Основы PHP. Урок 2. Переменные.

Рассмотрим основополагающие элементы языка программирования - переменные.

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

Чтобы данные "запомнились" в переменной, в памяти компьютера выделяется определенная область, у которой есть адрес, а сама переменная "связывается" с этим адресом. Обращаясь далее к переменной, фактически происходит обращение к области памяти по этому адресу, где находятся необходимые нам данные. 

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

$a // переменная a
$myName // переменная myName
$myname // переменная  myname, отличная от myName, потому что имена переменных в PHP чувствительны к регистру
$_author // переменная _author
$777casino // неверно, переменная должна начинаться с буквы или символа подчеркивания

Конечно, вы заметили, что я использую символы // для краткого описания переменной. Так в языке PHP обозначаются однострочные комментарии (какие-то Ваши заметки и примечания внутри скрипта, комментирующие строку или участок кода). Символами /* в начале комментария и */ в конце можно выделить многострочный комментарий.

// однострочный комментарий, первая строка
// однострочный комментарий, вторая строка

/* многострочный комментарий, первая строка
    многострочный комментарий, вторая строка
    ...
   многострочный комментарий, последняя строка */

Комментарии создаются в коде скрипта для удобства и не обрабатываются интерпретатором PHP.

Чтобы переменная хранила какое-то значение, его нужно ей присвоить. Для присваивание значения используется оператор =

Давайте его попробуем, для чего перейдем в каталог myphp и создадим там файл second.php со следующим содержимым:

<?php
    $a;
    echo $a;
    $a = 5;
    echo $a;
?>

Следует сразу заметить, что инструкции в языке PHP разделяются символом ;

$a = 5; - это отдельная инструкция, в которой мы говорим интерпретатору, что переменной $a нужно присвоить значение 5

Выполним данный скрипт:

Видим предупреждение PHP о том, что выполняя echo $a; в третьей строке, мы обратились к неопределенной переменной $a (PHP Notice: Undefined variable: a), и только после того, как ей было присвоено значение $a = 5;  следующий echo $a; вывел в консоль 5 без предупреждений.

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

Рассмотрим следующий пример third.php:

<?php
    $a = 5;
    $b = $a;
    echo "Переменная а: $a" . PHP_EOL;
    echo "Переменная b: $b" . PHP_EOL;
    $a = $a + 5;
    $b = $b + 3;
    echo "Переменная а: $a" . PHP_EOL;
    echo "Переменная b: $b" . PHP_EOL;
?>
     

Выполним скрипт:

В PHP по умолчанию переменные всегда присваиваются по значению. Когда мы переменной $b присвоили значение переменной $a, значение из переменной $a (это 5) было скопировано в переменную $b. Как видно дальше, изменение переменных не влияет в дальнейшем друг на друга (константа PHP_EOL означает окончание строки и используется для удобства отображения вывода в консоль).

Это означает, что в момент присваивания значения переменной $b (определения переменной), для данной переменной была выделена своя область памяти, после чего было прочитано значение переменной $a и помещено во вновь созданную область памяти, а адрес созданной области памяти был связан с переменной $b.

Существует также другой способ присвоения значений переменным, называемый присвоение по ссылке fourth.php:

<?php
    $a = 5;
    $b = &$a;
    echo "Переменная а: $a" . PHP_EOL;
    echo "Переменная b: $b" . PHP_EOL;
    $b = $b + 3;
    echo "Переменная а: $a" . PHP_EOL;
    echo "Переменная b: $b" . PHP_EOL;
?>

Выполним скрипт:

В строке $b = &$a; мы определяем переменную $b по ссылке на переменную $a (используется знак амперсанд &). Это означает, что для переменной $b не выделяется своя область памяти, а переменная $b связывается с адресом ячейки памяти, в которой расположено значение переменной $a. Т.е. и $a и $b указывают на одно и то же значение. Теперь, если мы изменяем значение переменной $b, то по ссылке изменяется значение переменной $a (хотя мы и не выполняем над ней никаких операций), что и видно в ходе выполнения программы. Следовательно и наоборот, изменяя значение $a, изменим и значение $b, поскольку речь идет об одном "общем" значении.

Существуют такие типы данных в PHP, помимо прочих, как объект и массив. Так вот для них правило присваивания по значению не работает. Это исключение из данного правила. В момент присваивания $b = $a, если в переменной $a находится объект или массив, в переменной $b все равно будет ссылка на $a, а объект (или массив) будет в памяти в единичном экземпляре. К этому моменту мы еще вернемся в будущих уроках.

Успехов в учебе! ;)

 

Александр Ляхович

Александр Ляхович

Автор "Блога из ломтиков. Заметки продолжающего веб-разработчика". Системный администратор, продолжающий web-разработчик, радиоинженер. Более 7 лет занимаюсь сайтостроением и изучаю данную область.