PHP
Я сторонник красивого и оптимизированного кода, хоть и не всегда у меня получается следовать всем правилам «хорошего тона» в программировании.
Сейчас же речь пойдет о правильном использовании двойных и одинарных кавычек в php. Перед тем, как начать писать пост, я бегло просмотрел имеющиеся у меня книги по php, и, что странно, ни в одной не увидел правильного использования кавычек. Почему – для меня загадка. Обвинять авторов в дилетантстве нет ни малейшей возможности, книги далеко не для «чайников». Может быть просто не хотели акцентировать на этом внимание, дескать кому надо, тот сам разберется.
Кавычки, что логично, бывают одинарными и двойными. Различие их использования в php заключается в следующем. Строку, заключенную в одинарные кавычки, интерпретатор php выводит как есть, заключенную же в двойные кавычки парсит на наличие в ней переменных и, найдя таковые, подставляет их значения.
- <?php
- $var = 1;
- echo '$var'; //на экран выведется "$var"
- echo "$var"; /*на экран выведется цифра 1, т.к. вместо переменной подставляется ее значение*/
- ?>
Следовательно, если нам надо вывести текст «как есть», то используем одинарные кавычки. Если необходимо подставить вместо переменной ее значение – двойные (если переменная только одна, то кавычки можно и вовсе опустить). Часто можно встретить такой код:
- <?php
- echo "Какой-то текст";
- ?>
Выводится просто текст. Но в коде он по какой-то неведомой причине заключен в двойные кавычки, что заставляет интерпретатор парсить его на наличие переменных. Правильным будет заключить текст в одинарные кавычки.
Рассмотрим тривиальную задачу вывода переменной в составе текста, в том числе и с использованием html кода.
- <?php
- $date;
- echo "Сегодняшняя дата: <strong>$date</strong>";
- ?>
Все выводится хорошо, текст и выделенная жирным дата, которая подставляется вместо переменной. Но необходимо помнить две вещи. Первое, это особенность интерпретатора: конкатенация строк происходим намного быстрее и требует меньше ресурсов, нежели синтаксический анализ строк. И второе - не стоит забывать про парадигму программирования «разделяй и властвуй». Не надо мешать все в одно, гораздо правильнее будет разделить текст на две части – требующую и не требующую парсинга интерпретатором. Таким образом, пример выше стоит записать так:
- <?php
- $date;
- echo 'Сегодняшняя дата: <strong>'.$date.'</strong>';
- ?>
Естественно, следовать этому правилу (заключать все, что не требует парсинга, в одинарные кавычки) надо не только при выводе текста, но и при присвоении значений строковым переменным:
- <?php
- $svar = 'Значение переменной';
- ?>
Или, например, при использовании строк при передаче аргументов функции:
- <?php
- function sum_str($first_string, $second_string) {
- return $first_string.' - '.$second_string;
- }
- $var = 'Параметр';
- echo sum_str($var, 'значение'); /*на экран выведется строчка "Параметр - значение"*/
- ?>
И хотя на современных компьютерах выигрыш во времени интерпретирования кода в зависимости от использования одинарных или двойных кавычек будет фактически незаметен, особенно в небольших скриптах, стоит все-таки изначально приучаться себя писать грамотный код, это намного легче, чем потом переучиваться.
- 5 комментариев
Приятно иногда покопаться в грамотно оформленных исходниках, однако часто стал замечать, что разобраться в самописном коде трудно уже на следующий день. Видимо сказывалось отсутствие единого стиля программирования, что приводило код к бессмысленному нагромождению из скобок, непонятных переменных, функций. Постепенно пришло осознание того, что все-таки стоит вогнать организацию кода в некие рамки, а не писать как попало. К сожалению, каких-либо подробных инструкций не попадалось, и я продолжал кодить в «свободном» стиле. И вот с неделю назад наткнулся в одной книге по php в разделе “Полезные советы” на достаточно хорошую статью. Изначально хотел перепечатать себе в блог, но потом нашел оригинал в интернете, поэтому просто скопипащу. Тем, кто еще не выработал свой стиль программирования, читать обязательно.
Расстановка фигурных скобок и отступы
Существует несколько стилей расстановки фигурных скобок, все они диктуются существующими стилями в других C-подобных языках программирования.
1) Рациональный стиль
Это один из наиболее распространенных стилей, так как им пользовались Керниген (Kernighan) и Ричи (Ritchie), авторы языка C.
- <?php
- if($flag){
- echo "Hello world!";
- }
- ?>
Преимущество этого подхода заключается в экономии вертикального пространства, жизненно важного при отладке большого блока кода. Оборотной стороной такого подхода является то, что может оказаться трудным найти символ {, спрятанный в конце строки. Этого стиля придерживаются и Java-программисты, как-то приписывает Sun.
2) Стиль Алмена
Эрик Алемен (Eric Allman) написал утилиты BSD в этом стиле, поэтому этот стиль часто называют "стиль BSD":
- <?php
- if($flag)
- {
- echo "Hello world!";
- }
- ?>
Аргументом в поддержку такого стиля является тот факт, что область видимости блочного оператора ясна и визуально ассоциируется с управляющим оператором.
3) Стиль Whitesmith
Данный стиль предписывает использование следующей расстановки фигурных скобок
- <?php
- if($flag)
- {
- echo "Hello world!";
- }
- ?>
Этот стиль имеет преимущество в том, что скобки более тесно ассоциируются с кодом, который они включают и разграничивают, однако при визуальном просмотре текста отыскать скобки оказывается чуть более сложно.
4) Стиль GNU
Программисты GNU фонда Free Software Foundation используют следующий стиль расстановки фигурных скобок
- <?php
- if($flag)
- {
- echo "Hello world!";
- }
- ?>
Внутри любых управляющих конструкций операторы следует располагать с отступом на одинаковое число пробелов, например для операторов if-then-else код должен выглядеть следующим образом:
- <?php
- $flag = true;
- if($flag)
- {
- echo "Переменная равна true";
- exit();
- }
- else
- {
- echo "Переменная равна false";
- exit();
- }
- ?>
Число может быть любым, обычно используют 2, 4 или 8 пробелов. Наиболее оптимальным является использование 2 пробелов, так как при их большем числе вложенные блоки становятся "растянутыми" и их становится сложно воспринимать.
Пробелы вокруг символов
Бинарные операторы следует обрамлять пробелами:
- <?php
- // Неправильно
- $a=$b+$c*$d;
- // Правильно
- $a = $b + $c * $d;
- ?>
Символ пробела ассоциируется с новым словом, поэтому формула читается не как непонятный набор символов, а как нечто осмысленное.
Комментарии
Расставляйте комментарии по принципу “чем больше, тем лучше” — пройдёт некоторое время и вы забудете, что делал тот или иной программный блок.
PHP собрал в себе практически все комментарии современных языков программирования, наряду с однострочными комментариями в стиле shell-скриптов (#)
- <?php
- # Программный модуль index.php
- echo "Hello world!";
- ?>
и С++ (//)
- <?php
- // Программный модуль index.php
- echo "Hello world!";
- ?>
можно использовать многострочный комментарий в стиле C:
- <?php
- /* Это многострочный комментарий в стиле С
- он охватывает несколько строк – не допускается
- вложенных комментариев
- */
- echo "Hello world!";
- ?>
К хорошему тону относится использование однострочных комментариев для короткого комментария, а многострочного — для комментария, охватывающего несколько строк. Не возбраняется использовать однострочные комментарии для большого текста, особенно в начале файла или важного блока кода
- <?php
- //////////////////////////////////////////////////////
- // Гостевая книга
- //////////////////////////////////////////////////////
- ?>
Как и при работе с отступами и фигурными скобками, основным требованием является необходимость придерживаться одного стиля во всех программных блоках.
При расстановке однострочных комментариев возможно два варианта: непосредственно перед выполняемым оператором
- <?php
- // Вывод текстовой строки в окно браузера
- echo "Hello world!";
- ?>
и после точки с запятой
- <?php
- echo "Hello world!"; // Вывод текстовой строки в окно браузера
- ?>
Лучше придерживаться первого правила, так как строка получается длинной и плохо воспринимается читающим. Единственным оправданием использования такого комментария является комментирование закрывающейся скобки длинного программного блока, содержащего много вложенных блоков.
- <?php
- if($tot)
- {
- while($position = next($tot))
- {
- /* Очень длинный код
- содержащий много
- вложенных блоков
- ...
- */
- if($flag)
- {
- echo "Ошибка";
- exit();
- }
- } // Конец while($position = next($tot))
- }
- ?>
Имена переменных и функций
Существует несколько стилей названия переменных
$var_bell — стиль C: нижний регистр, знак подчёркивания.
$VarBell — стиль Pascal: каждая подстрока в названии начинается с большой буквы.
$varBell — стиль Java: первая строка начинается с маленькой буквы, все последующие с большой.
Не имеет значения, какой стиль будет вами выбран — главное придерживаться в коде одного стиля.
Замечание
В программировании константы традиционно записываются в верхнем регистре YANDEX_BOT. Если вы хотите, чтобы другие программисты могли легко воспринимать ваш код, придерживайтесь этого правила.
При названии переменных и функций старайтесь давать им осмысленные имена. Иногда ничего не приходит в голову, и появляется назвать переменную как попало — остерегайтесь этого.
(c) Симдянов И.В.
