Правила прописания исходного кода PHP

Правила прописания грамотного кода на PHP

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

Когда вы работаете в крупной компании в которой по мимо вас есть еще несколько программистов, то вам приходится работать с чужим кодом. Для того чтобы чтение кода было удобным для всех, придумали “Правила прописания исходного кода”.

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

Правила переноса строки

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

Если строка превышает этот размер, то нужно использовать правила переноса строки:

  • переносить можно после запятой или перед оператором;
  • переносимая строка должна быть сдвинута относительно верхней на один символ табуляции;

Пробелы и табуляция

Пробелы и табуляции несут разные функции. Для тех кто не знает, табуляция – это отступ, который выполняется нажатием на клавишу Tab и равен 8 пробелам. Табуляция, так же отличается тем, что в некоторых компиляторах она может регулироваться в настройках и вы можете указать нужную для вас длину отступов.

В каких случаях ставится табуляция:

  • Используется при переносе строк (правило, выше)
  • Используется для обозначения подчиненности.

В каких случаях ставится пробел:

  • Один пробел используется в объявлении методов после запятой, но не перед скобками:TestMethod($a, $b, $c);Примеры неправильного использования:
    • TestMethod($a,$b,$c);
    • TestMethod( $a, $b, $c );
  • Так же одиночный пробел используют для выделения операторов: $a = $b * $c / $d;Пример неправильного использования: $a=$b*$c/$d;
  • Также пробелы используются при форматировании циклов:for ($i = 0; $i < 10; $i++).Пример неправильного использования: for($i=0;$i<10;$i++)

Правила расстановки фигурных скобок

Открывающая скобка должна ставиться под соответствующим оператором и на одном отступе с ним. Закрывающая скобка должна ставится под соответствующей открывающей.

Пример:

if ($condition)
{
   ...
}

Использование тернарного оператора “?:”

Условие следует заключать в скобки, тем самым отделяя его от остального кода. По возможности, действия, производимые по условию, должны быть простыми функциями. Если весь блок ветвления плохо читается, то стоит заменить его на if/else.

Пример((условие) ? funct1() : func2());

Выражения

Желательно, чтобы в каждой строчке присутствовало только одно выражение.

Пример. Неправильно писать так:

$a = $b; $b = $c; $c = $a;

Правильно писать так

$a = $b;
$b = $c;
$c = $a;

Инструкции “if”, “else”, “while” и т.п.

Допустимы два вида написания инструкций:

  • если тела всех частей инструкции состоят не более чем из одного выражения, то инструкция может записываться в виде
    if (условие) 
        действие1; 
    else 
        действие2;
  • если тело хотя бы одной из частей состоит более чем из одного выражения, то инструкция должна записываться в виде
    if (условие) 
    {
        действие1; 
    } 
    else

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

Пример. Неправильно писать так:

if ($a == 0) $a = 10;
else{
$a = 5;
$b = 10;}

Правильно писать так:

if ($a == 0)
{
  $a = 10;
}
else
{
  $a = 5;
  $b = 10;
}

Сложные инструкции

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

 if(COption::GetOptionString("main", "new_user_registration", "N")=="Y" && $_SERVER['REQUEST_METHOD']=='POST' &&
     $TYPE=="REGISTRATION" && (!defined("ADMIN_SECTION") || ADMIN_SECTION!==true))

Можно записать как:

if (COption::GetOptionString("main", "new_user_registration", "N") == "Y"
     && $_SERVER['REQUEST_METHOD'] == 'POST' && $TYPE == "REGISTRATION"
     && (!defined("ADMIN_SECTION") || ADMIN_SECTION !== true))
{
}

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

if((!(defined("STATISTIC_ONLY") && STATISTIC_ONLY && substr($APPLICATION->GetCurPage(), 0,
     strlen(BX_ROOT."/admin/"))!=BX_ROOT."/admin/")) && COption::GetOptionString("main", "include_charset", "Y")=="Y"
     && strlen(LANG_CHARSET)>0)

Можно записать так:

$publicStatisticOnly = False;
if (defined("STATISTIC_ONLY")
  && STATISTIC_ONLY
  && substr($APPLICATION->GetCurPage(), 0, strlen(BX_ROOT."/admin/")) != BX_ROOT."/admin/")
{
     $publicStatisticOnly = True;
}
if (!$publicStatisticOnly && strlen(LANG_CHARSET) > 0
     && COption::GetOptionString("main", "include_charset", "Y") == "Y")
{
}

или так:

if (!defined("STATISTIC_ONLY") || ! STATISTIC_ONLY
  || substr($APPLICATION->GetCurPage(), 0, strlen(BX_ROOT."/admin/")) == BX_ROOT."/admin/")
{
  if (strlen(LANG_CHARSET) > 0 && COption::GetOptionString("main", "include_charset", "Y") == "Y")
  {
  }
}

Форматирование массивов

Массивы, которые записываются в несколько строк, следует форматировать следующим образом:

$arFilter = array(
  "key1" => "value1",
  "key2" => array(
      "key21" => "value21",
      "key22" => "value22",
  )
);

Пустые строки

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

Именование переменных

  • Не используйте подчеркивание для отделения слов внутри идентификаторов, это удлиняет идентификаторы и затрудняет чтение.
  • Старайтесь давать переменным, методам и пр. “говорящие” названия. Предпочтительно использовать имена, которые ясно и четко описывают предназначение и/или смысл сущности.
  • Старайтесь делать имена идентификаторов как можно короче (но не в ущерб читабельности).
  • Если в имени содержится аббревиатура, лучше вместо всех заглавных оставить только первую букву заглавной, а остальные написать строчными. Т.е. лучше задать имя getHtmlStatistic, а не getHTMLStatistic.
  • Первое логическое слово должно начинаться с маленькой буквы, остальные логические слова – с большой. Имена переменных могут иметь префиксы, если требуется явно указать тип переменной: ar – для массивов, db – для наборов данных из базы и т.п. Пример: $testCounter$userPassword.
  • При именование функций и методов, каждое логическое слово должно начинаться с заглавной буквы (стиль Паскаль). Например: CountVariableChangeUserPassword.

Комментарии

Для пояснения назначения класса или метода необходимо размещать комментарий перед объявлением этого класса или метода. Следует добавлять комментарий о назначении классов и методов к каждому публичному классу или методу. Перед логическими секциями кода желательно добавлять комментарии о том, что данная секция будет делать. Комментарии должны быть только на английском языке.

SQL запросы

Каждая операция SELECTFROMWHEREORDER BYGROUP BYHAVING должна начинаться с новой строки. Правило переноса длинной строки такое же как в PHP – новая строка с табуляцией.

На этом всё!

Если у вас есть вопросы, пишите их в нашей группе – https://vk.com/progtime

Вы так же можете разместить свой вопрос на нашем форуме, где другие программисты смогут вам помочь в решение вашей задачи – https://vk.com/prog_time

В ней мы делимся своим опытом с другими начинающими программистами, поэтому обязательно ответим на ваш вопрос.

Так же прокачивайте свои навыки на нашем канале – https://www.youtube.com/c/ProgTime

Рекомендованные

[pt_view id=”09e17e15kg”]

Вам также будет интересно

[pt_view id=”59d86e5bw7″]

На этом всё!
Если у вас есть вопросы, пишите их в нашей группе - https://vk.com/progtime
Вы так же можете разместить свой вопрос на нашем форуме, где другие программисты смогут вам помочь в решение вашей задачи - https://vk.com/prog_time
В ней мы делимся своим опытом с другими начинающими программистами, поэтому обязательно ответим на ваш вопрос.
Так же прокачивайте свои навыки на нашем канале - https://www.youtube.com/c/ProgTime

26
Оставить комментарий

avatar
26 Цепочка комментария
0 Ответы по цепочке
0 Последователи
 
Популярнейший комментарий
Цепочка актуального комментария
23 Авторы комментариев
AndrewCigAndrewCigMathewDaupsMathewDaupsBradleyAnync Авторы недавних комментариев
  Подписаться  
новее старее большинство голосов
Уведомление о
JanleF
Гость

Canadian Pha [url=https://apcialisle.com/#]Cialis[/url] Viagra Soft Tabs Wirkung Cialis Viagra Venta Espana

JanleF
Гость

Kamagra Oral Jelly 200 Mg [url=https://apcialisle.com/#]cialis 20mg for sale[/url] Comprare Cialis Originale Cialis Keflex Bad Breath

Bupbaipt
Гость
Bupbaipt

viagra sale jhb how to get prescription drugs without doctor order viagra from mexico

Bupbaipt
Гость
Bupbaipt

buy viagra edmonton http://tadmedz.com viagra online uk cheap

Bupbaipt
Гость
Bupbaipt

levitra online sales buy cialis generic buying cheapest generic cialis soft tab

Arturojep
Гость
Arturojep

cialis 20 mg for sale cheap viagra cheapest price for cialis

JimmyGoori
Гость
JimmyGoori

buy discount generic cialis list of approved canadian pharmacies viagra sale mississauga

JanleF
Гость

Vigre In Usa Without Prickription [url=https://buyciallisonline.com/#]cialis online pharmacy[/url] Cialis Et Cholesterol best cialis online Chloroquine

RaymondLem
Гость
RaymondLem

buy now viagra cialis viagra for women over 50 buy cialis ebay

JanleF
Гость

Kamagra Test [url=https://buycialisuss.com/#]Buy Cialis[/url] How Does Kamagra Work Buy Cialis Buy Cheap Amoxil Without Prescription

Harryraw
Гость
Harryraw

download cheap viagra http://aralenph.com – aralen viagra buy england

Harryraw
Гость
Harryraw

best place to order cialis online http://hydroxychloroquine24.com – hydroxychloroquine 200 mg price in india generic cialis on sale

Harryraw
Гость
Harryraw

cheap genuine levitra http://aralenph.com – chloroquine where can buy viagra

Harryraw
Гость
Harryraw

can buy viagra rite aid http://tadal24ph.com – cialis cost order viagra

BradleyAnync
Гость
BradleyAnync

buy viagra no prescription
buy viagra

BradleyAnync
Гость
BradleyAnync
BradleyAnync
Гость
BradleyAnync

cialis online cheap from canada
sildenafil

BradleyAnync
Гость
BradleyAnync

order levitra cheap
generic viagra

BradleyAnync
Гость
BradleyAnync

best place buy viagra yahoo
cheap viagra

BradleyAnync
Гость
BradleyAnync

cialis online cheap
viagra pills

BradleyAnync
Гость
BradleyAnync

cheap viagra jelly uk
sildenafil

BradleyAnync
Гость
BradleyAnync

buy levitra paypal
buy sildenafil

MathewDaups
Гость
MathewDaups

coupon for cialis by manufacturer
http://cialisxtl.com/ cialis vs viagra

MathewDaups
Гость
MathewDaups

buy viagra cialis
http://cialisxtl.com/ cialis or viagra

AndrewCig
Гость
AndrewCig

how much is viagra https://sildenafilprof.com
buy levitra uk

AndrewCig
Гость
AndrewCig

viagra 100mg https://sildenafilprof.com
viagra buy mastercard