Что такое переменная

Сценаристы сели писать сценарий для экранизации «Игры Престолов». Джордж Мартин настоял на использовании PHP. Вот фрагмент сценария:

<?php

print_r("JAIME");
print_r(": A sword for the wall?\n");

print_r("JON SNOW");
print_r(": I already have one.\n");

print_r("JAIME");
print_r(": Good man. Have you swung it yet?\n");

print_r("JON SNOW");
print_r(": Of course I have.\n");

На экран выведется аккуратный диалог:

JAIME: A sword for the wall?
JON SNOW: I already have one.
JAIME: Good man. Have you swung it yet?
JON SNOW: Of course I have.

Сценаристы начали волноваться: что, если придется изменить имя какого-нибудь персонажа? Придется делать тысячу изменений в огромном тексте! Было бы удобнее, если бы имена героев хранились где-то в одном месте, но при этом использовались сколько угодно раз. А если их нужно изменить, то достаточно было бы сделать это только в одном месте.

В PHP это возможно с помощью переменных. Переменная — это как раз то единое «место», где хранится какая-то информация. Создадим две переменные для хранения двух имён:

<?php

$kingslayer = "JAIME";
$bastard = "JON SNOW";

… и заменим имена героев в самом сценарии на обращение к переменным:

print_r($kingslayer);
print_r(": A sword for the wall?\n");

print_r($bastard);
print_r(": I already have one.\n");

print_r($kingslayer);
print_r(": Good man. Have you swung it yet?\n");

print_r($bastard);
print_r(": Of course I have.\n");

Продюсеры как раз решили изменить имя одного из героев: им не нравится Jon Snow, они хотят Ivan Snegin.

Не смотря на то, что Джон Сноу фигурирует в сценарии тысячи раз, изменить его имя легко:

<?php

$kingslayer = "JAIME";
$bastard = "IVAN SNEGIN";

print_r($bastard);
print_r(": I already have one.\n");

print_r($kingslayer);
print_r(": Good man. Have you swung it yet?\n");

print_r($bastard);
print_r(": Of course I have.\n");

Результат на экране:

JAIME: A sword for the wall?
IVAN SNEGIN: I already have one.
JAIME: Good man. Have you swung it yet?
IVAN SNEGIN: Of course I have.

Использование переменных можно сравнить с зеркалом, в котором отражается какой-то объект. Можно зажечь одну свечу и поставить десять зеркал. Получится десять идентичных отражений. Но если захочется заменить десять отражений свеч на десять отражений лампочки, то не нужно трогать зеркала. Нужно заменить саму свечу.

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

То есть, если перенести создание переменных вниз и пытаться использовать их до создания, то такая программа работать не будет!

<?php

print_r($kingslayer);
print_r(": A sword for the wall?\n");

print_r($bastard);
print_r(": I already have one.\n");

print_r($kingslayer);
print_r(": Good man. Have you swung it yet?\n");

print_r($bastard);
print_r(": Of course I have.\n");

$kingslayer = "JAIME";
$bastard = "JON SNOW";

Получается, работа с переменными — это два отдельных действия:

  1. Создание переменной один раз.
  2. Использование переменной сколько угодно раз.

Переменные создаются специальной конструкцией вида $varname. Первым символом обязательно идет $, а затем любой набор допустимых символов, к которым относятся буквы английского алфавита, цифры и знаки -, _. При этом цифру нельзя ставить в начале.

Сценаристы назвали переменные $kingslayer и $bastard, но могли назвать как угодно. Названия переменных призваны помогать программистам читать и понимать код. Можно назвать переменную $x или $kafk2igh2 — и для интерпретатора PHP и для компьютера не будет никакой разницы. Но программисту будет сложно понять, что означает такая переменная.

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

Мы гораздо чаще читаем код, чем пишем. Причём не свой, а написанный другими людьми. От качества и понятности имён переменных зависит половина успеха в анализе кода.

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

Предлагаю интересное упражнение: придумайте название для переменной, в которой будет храниться «количество братьев и сестёр короля». Запишите его в блокноте или отправьте себе на почту. Не указывайте там ничего, кроме названия переменной. А через несколько уроков мы вернёмся к этой теме ;-)

Задание

Создайте переменную с именем motto и содержимым What Is Dead May Never Die!. Распечайте содержимое переменной.


Советы
Определения
  • Переменная — способ сохранить информацию и дать ей имя для последующего использования в коде.

Упражнение доступно только авторизованным пользователям.

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