PHP

Я сторонник красивого и оптимизированного кода, хоть и не всегда у меня получается следовать всем правилам «хорошего тона» в программировании.

Сейчас же речь пойдет о правильном использовании двойных и одинарных кавычек в php. Перед тем, как начать писать пост, я бегло просмотрел имеющиеся у меня книги по php, и, что странно, ни в одной не увидел правильного использования кавычек. Почему – для меня загадка. Обвинять авторов в дилетантстве нет ни малейшей возможности, книги далеко не для «чайников». Может быть просто не хотели акцентировать на этом внимание, дескать кому надо, тот сам разберется.

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

  1. <?php
  2. $var = 1;
  3. echo '$var'; //на экран выведется "$var"
  4. echo "$var"; /*на экран выведется цифра 1, т.к. вместо переменной подставляется ее значение*/
  5. ?>

Следовательно, если нам надо вывести текст «как есть», то используем одинарные кавычки. Если необходимо подставить вместо переменной ее значение – двойные (если переменная только одна, то кавычки можно и вовсе опустить). Часто можно встретить такой код:

  1. <?php
  2. echo "Какой-то текст";
  3. ?>

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

Рассмотрим тривиальную задачу вывода переменной в составе текста, в том числе и с использованием html кода.

  1. <?php
  2. $date;
  3. echo "Сегодняшняя дата: <strong>$date</strong>";
  4. ?>

Все выводится хорошо, текст и выделенная жирным дата, которая подставляется вместо переменной. Но необходимо помнить две вещи. Первое, это особенность интерпретатора: конкатенация строк происходим намного быстрее и требует меньше ресурсов, нежели синтаксический анализ строк. И второе - не стоит забывать про парадигму программирования «разделяй и властвуй». Не надо мешать все в одно, гораздо правильнее будет разделить текст на две части – требующую и не требующую парсинга интерпретатором. Таким образом, пример выше стоит записать так:

  1. <?php
  2. $date;
  3. echo  'Сегодняшняя дата: <strong>'.$date.'</strong>';
  4. ?>

Естественно, следовать этому правилу (заключать все, что не требует парсинга, в одинарные кавычки) надо не только при выводе текста, но и при присвоении значений строковым переменным:

  1. <?php
  2. $svar = 'Значение переменной';
  3. ?>

Или, например, при использовании строк при передаче аргументов функции:

  1. <?php
  2. function sum_str($first_string, $second_string) {
  3.     return $first_string.' - '.$second_string;
  4. }
  5. $var = 'Параметр';
  6. echo sum_str($var, 'значение'); /*на экран выведется строчка "Параметр - значение"*/
  7. ?>

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

Приятно иногда покопаться в грамотно оформленных исходниках, однако часто стал замечать, что разобраться в самописном коде трудно уже на следующий день. Видимо сказывалось отсутствие единого стиля программирования, что приводило код к бессмысленному нагромождению из скобок, непонятных переменных, функций. Постепенно пришло осознание того, что все-таки стоит вогнать организацию кода в некие рамки, а не писать как попало. К сожалению, каких-либо подробных инструкций не попадалось, и я продолжал кодить в «свободном» стиле. И вот с неделю назад наткнулся в одной книге по php в разделе “Полезные советы” на достаточно хорошую статью. Изначально хотел перепечатать себе в блог, но потом нашел оригинал в интернете, поэтому просто скопипащу. Тем, кто еще не выработал свой стиль программирования, читать обязательно.

Расстановка фигурных скобок и отступы

Существует несколько стилей расстановки фигурных скобок, все они диктуются существующими стилями в других C-подобных языках программирования.

1) Рациональный стиль

Это один из наиболее распространенных стилей, так как им пользовались Керниген (Kernighan) и Ричи (Ritchie), авторы языка C.

  1. <?php
  2.   if($flag){
  3.     echo "Hello world!";
  4.   }
  5. ?>

Преимущество этого подхода заключается в экономии вертикального пространства, жизненно важного при отладке большого блока кода. Оборотной стороной такого подхода является то, что может оказаться трудным найти символ {, спрятанный в конце строки. Этого стиля придерживаются и Java-программисты, как-то приписывает Sun.

2) Стиль Алмена

Эрик Алемен (Eric Allman) написал утилиты BSD в этом стиле, поэтому этот стиль часто называют "стиль BSD":

  1. <?php
  2.   if($flag)
  3.   {
  4.     echo "Hello world!";
  5.   }
  6. ?>

Аргументом в поддержку такого стиля является тот факт, что область видимости блочного оператора ясна и визуально ассоциируется с управляющим оператором.

3) Стиль Whitesmith

Данный стиль предписывает использование следующей расстановки фигурных скобок

  1. <?php
  2.   if($flag)
  3.     {
  4.     echo "Hello world!";
  5.     }
  6. ?>

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

4) Стиль GNU

Программисты GNU фонда Free Software Foundation используют следующий стиль расстановки фигурных скобок

  1. <?php
  2.   if($flag)
  3.     {
  4.       echo "Hello world!";
  5.     }
  6. ?>

Внутри любых управляющих конструкций операторы следует располагать с отступом на одинаковое число пробелов, например для операторов if-then-else код должен выглядеть следующим образом:

  1. <?php
  2.   $flag = true;
  3.   if($flag)
  4.   {
  5.     echo "Переменная равна true";
  6.     exit();
  7.   }
  8.   else
  9.   {
  10.     echo "Переменная равна false";
  11.     exit();
  12.   }
  13. ?>

Число может быть любым, обычно используют 2, 4 или 8 пробелов. Наиболее оптимальным является использование 2 пробелов, так как при их большем числе вложенные блоки становятся "растянутыми" и их становится сложно воспринимать.

Пробелы вокруг символов

Бинарные операторы следует обрамлять пробелами:

  1. <?php
  2.   // Неправильно
  3.   $a=$b+$c*$d;
  4.   // Правильно
  5.   $a = $b + $c * $d;
  6. ?>

Символ пробела ассоциируется с новым словом, поэтому формула читается не как непонятный набор символов, а как нечто осмысленное.

Комментарии

Расставляйте комментарии по принципу “чем больше, тем лучше” — пройдёт некоторое время и вы забудете, что делал тот или иной программный блок.

PHP собрал в себе практически все комментарии современных языков программирования, наряду с однострочными комментариями в стиле shell-скриптов (#)

  1. <?php
  2.   # Программный модуль index.php
  3.   echo "Hello world!";
  4. ?>

и С++ (//)

  1. <?php
  2.   // Программный модуль index.php
  3.   echo "Hello world!";
  4. ?>

можно использовать многострочный комментарий в стиле C:

  1. <?php
  2.   /* Это многострочный комментарий в стиле С
  3.      он охватывает несколько строк – не допускается
  4.      вложенных комментариев
  5.   */
  6.   echo "Hello world!";
  7. ?>

К хорошему тону относится использование однострочных комментариев для короткого комментария, а многострочного — для комментария, охватывающего несколько строк. Не возбраняется использовать однострочные комментарии для большого текста, особенно в начале файла или важного блока кода

  1. <?php
  2.   //////////////////////////////////////////////////////
  3.   // Гостевая книга
  4.   //////////////////////////////////////////////////////
  5. ?>

Как и при работе с отступами и фигурными скобками, основным требованием является необходимость придерживаться одного стиля во всех программных блоках.
При расстановке однострочных комментариев возможно два варианта: непосредственно перед выполняемым оператором

  1. <?php
  2.   // Вывод текстовой строки в окно браузера
  3.   echo "Hello world!";  
  4. ?>

и после точки с запятой

  1. <?php
  2.     echo "Hello world!"; // Вывод текстовой строки в окно браузера
  3. ?>

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

  1. <?php
  2.   if($tot)
  3.   {
  4.      while($position = next($tot))
  5.      {
  6.         /* Очень длинный код
  7.            содержащий много  
  8.            вложенных блоков
  9.            ...  
  10.         */
  11.         if($flag)
  12.         {
  13.           echo "Ошибка";
  14.           exit();
  15.         }
  16.      } // Конец while($position = next($tot))
  17.   }
  18. ?>

Имена переменных и функций

Существует несколько стилей названия переменных

$var_bell — стиль C: нижний регистр, знак подчёркивания.

$VarBell — стиль Pascal: каждая подстрока в названии начинается с большой буквы.

$varBell — стиль Java: первая строка начинается с маленькой буквы, все последующие с большой.

Не имеет значения, какой стиль будет вами выбран — главное придерживаться в коде одного стиля.

Замечание
В программировании константы традиционно записываются в верхнем регистре YANDEX_BOT. Если вы хотите, чтобы другие программисты могли легко воспринимать ваш код, придерживайтесь этого правила.

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

(c) Симдянов И.В.