Предсловие
Описываются приёмы хорошего стиля программирования
применительно к PHP. Использование данных приёмов позволяет увеличить
призводительность программирования на 30%, а так же упростить отладку
и сопровождение Web-приложений.
Всякий кто сталкивается c PHP, в скором времени приходит к выводу,
что это не совсем удобный язык для изучения. Дело в том, что он
достаточно новый и динамично развивающийся, каждая последующая версия
буквально перечёркивает предыдущую. В таких условиях имеющаяся документация
быстро устаревает, а специалисты предпочитают не писать книг, так
как информация размещённая в книге начинает устаревать до выхода
книги в свет.
Почему же PHP так популярен и каким образом столько человек разом
обучилось PHP? Дело в том, что большинство PHP-программистов не
изучало язык с нуля, а изучало его либо уже зная С/С++, либо Perl.
Perl является C-подобным языком программирования (как и PHP), а
является предшественником PHP, можно сказать что PHP это Web-ориентированный
Perl. Поскольку, PHP просто логически следует из Perl и широкое
распространение получил именно из-за того, что программистам было
легко переходить с Perl на PHP (ну и с С на PHP, тоже).
Замечание
Цитата: Язык Perl появился в 1986 году по
воле системного программиста Лари Уолла. Созданный первоначально
как средство обработки текстовых файлов, призванное облегчить жизнь
системному администратору UNIX, он превратился в настоящий язык
программирования. Традиционные области, в которых Perl применяется
особенно часто и успешно, — создание приложений CGI, системное администрирование
UNIX, обработка текста.
Кроме того, свой вклад вносит предметная область — программирование
для сети Интернет. Для серьёзного понимания которого желательно
знание очень многих вещей (HTML, SQL, UNIX, прикладных протоколов
— хотя бы HTTP, стилей программирования на С, Perl, Java).
Когда большинство PHP-программистов переходят в мир PHP с багажом
другого языка программирования (их стиль уже устоялся), спрос на
литературу, в которой бы обсуждались азы программирования не так
велик. Новичкам бывает трудно найти информацию об организации кода.
Мы надеемся, что эта статья поможет поставить свой собственный стиль,
что в конечном итоге может увеличить скорость разработки на 30%
и помочь при работе в команде, когда ваш код будет читаться другими
программистами, а вам соответственно придётся читать чужой код.
Расстановка фигурных скобок и отступы
Существует несколько стилей расстановки фигурных скобок, все
они диктуются существующими стилями в других 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 :) Наиболее оптимальным
является использование 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. Если вы хотите, чтобы
другие программисты могли легко воспринимать ваш код, придерживайтесь
этого правила.
При названии переменных и функций старайтесь давать им осмысленные
имена. Иногда ничего не приходит в голову, и появляется назвать
переменную как попало — остерегайтесь этого. В своё время было потрачено
не мало часов из-за неудачно названных переменных, иногда отладить
код удавалось лишь в том случае, если переменные были переименованы
подобающим образом.
Рассмотрим несколько примеров. Часто временные строки для хранения
SQL называют $query (запрос) — это очень удачное название, ассоциирующееся
именно с SQL-запросом. Обычно на этом всё и заканчивается. При появлении
второго запроса, вторая переменная получает имя $query1 — это порочная
практика. Обычно запросы в рамках одного скрипта отличаются своим
действием: один SQL-запрос может выполнять обновление (UPDATE),
другой выборку (SELECT), поэтому переменные лучше называть с указанием
действия оператора: $query_update и $query_select, соответственно.
Часто можно увидеть код
Код:
<?php
$query
= "SELECT * FROM catalog";
$query1 = mysql_query($query);
while($result
= mysql_fetch_array($query1))
{
/*
Код обработки */
}
?>
Здесь дескриптор запроса, возвращаемый функцией mysql_query()
назван $query1, это здорово запутывает как разработчика, так и читающего
текст программы. Дескриптор не несёт физического смысла — это лишь
ключ к результату, поэтому его лучше называть сокращённым именем
таблицы
Код:
<?php
$query = "SELECT * FROM
catalog";
$cat = mysql_query($query);
while($catalog
= mysql_fetch_array($cat))
{
/*
Код обработки */
}
?>