Веб-разработка? Это просто! Переменные переменных. Зачем они нужны.
Переменные переменных. Зачем они нужны.
Всем привет. Сегодня мы поговорим о переменных переменных и выясним, зачем они всё таки нужны (или не нужны).
В самом простом виде переменные переменных показаны в справке PHP. А именно -
$a = 'hello';
$$a = 'world';
echo $a . ${$a};
Подобная кривая конструкция выдаст на экран hello world. Другими словами, ${$a} эквивалентна вызову $hello. Не правда ли.. ужасно? Добавим сюда проблему неоднозначности, которая возникает при попытке обратиться к элементам массива (это подробно описано в справке по адресу http://ua.php.net/manual/en/language.variables.variable.php), добавим сюда возможность добавлять к имени переменной любое количество знаков доллара, о которой обычно
не пишут в учебниках, и возникнет вполне закономерное недоумение - зачем это вообще нужно?
Самое главное правило, которого должен придерживаться любой разработчик в любом проекте - код пишется для людей, а не для машин. Это правило помимо негласного этикета в среде профессионалов в виде комментариев и отступов, ещё и экономически обоснованно. Дело в том что сегодня разработка ПО стремительно дешевеет (не без помощи демпинга индусов). Прямым следствием является то, что поддерживать код должно быть дешевле, чем его писать. Т.о. становится понятно, что читабельный, понятный и простой в понимании код,
куда как более ценен, чем процессинг формы на Brainfuck'e (кто не в курсе, пусть насладится http://en.wikipedia.org/wiki/Brainfuck), пусть даже на Brainfuck'e этот процессинг работает на 0.0001 секунду быстрее.
Добавим сюда огромные вычислительные возможности современных серверов, которые могут прожевать мегаметры самого бездарного кода в течение секунды и станет понятно, что деньги, затрачиваемые на поддержку, должны быть минимальными. Разработчик должен иметь возможность спокойно и быстро разобраться в коде, написанном соседней командой, даже через пару лет после финального релиза проекта. Реалии PHP вполне это позволяют - всё таки это скриптовый язык, а не ассемблер.