Рассмотрим основополагающие элементы языка программирования - переменные.
Как и другие языки программирования, 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, а объект (или массив) будет в памяти в единичном экземпляре. К этому моменту мы еще вернемся в будущих уроках.
Успехов в учебе! ;)