Правила прописания исходного кода 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

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

avatar
73 Цепочка комментария
0 Ответы по цепочке
0 Последователи
 
Популярнейший комментарий
Цепочка актуального комментария
70 Авторы комментариев
DonaldshomyDonaldshomyRonaldtowRonaldtowRobertBor Авторы недавних комментариев
  Подписаться  
новее старее большинство голосов
Уведомление о
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

Robertorell
Гость
Robertorell

cialis lowest price cost of cialis

Robertorell
Гость
Robertorell

when will cialis go generic cialis price

RichardHap
Гость
RichardHap

over the counter viagra: viagrawithoutdoc viagra without a doctor prescription order viagra no prescription

RichardHap
Гость
RichardHap

viagra online pharmacy: viagra prescriptions over internet cheapest price for cialis

unsenty
Гость

Priligy Vs Prozac [url=https://viacialisns.com/]where to buy cialis[/url] Cialis J En Ai Pris Cialis Tadalafil 20 Mg Online Ervaringen

MurrayVum
Гость
MurrayVum

ed meds online canada buy prescription drugs online
onlinepharmacyero.com real viagra without a doctor prescription

MurrayVum
Гость
MurrayVum

tadalafil without a doctor’s prescription cvs prescription prices without insurance
onlinepharmacyero.com cheap pet meds without vet prescription

MurrayVum
Гость
MurrayVum

ed meds online canada ed meds online canada
onlinepharmacyero.com comfortis without vet prescription

MurrayVum
Гость
MurrayVum

viagra vs cialis bodybuilding buy prescription drugs from canada cheap
onlinepharmacyero.com how to get prescription drugs without doctor

AndrewBog
Гость
AndrewBog

cialis erections cialis prices

AndrewBog
Гость
AndrewBog

lowest price cialis cialis dosage 40 mg dangerous

RobertoLem
Гость
RobertoLem

viagra without a doctor prescription buy viagra online

RobertoLem
Гость
RobertoLem

how long does viagra last buy viagra

treantinc
Гость
treantinc

Get Generic Viagra Online Fepuri [url=https://acialisd.com/#]buy cialis from canada[/url] poopapsima Acheter Du Cialis Le Moins Cher soogma Cialis fenInverne Kamagra Oral Jelly Einnahme

Michaelnatty
Гость
Michaelnatty

viagra price viagra generic

Michaelnatty
Гость
Michaelnatty
Michaelnatty
Гость
Michaelnatty

viagra online buy viagra

Gabrieldak
Гость
Gabrieldak

cialis 30 day trial voucher: generic cialis 20 mg tablets

Gabrieldak
Гость
Gabrieldak
DanielEntex
Гость
DanielEntex

prescription drugs online without doctor erectile dysfunction pills

LesterRuild
Гость
LesterRuild

viagra without a doctor prescription canada over the counter viagra

RobertEpiva
Гость
RobertEpiva

diflucan tablets buy diflucan 150 mg

RobertEpiva
Гость
RobertEpiva

paxil for premature ejaculation paxil 20 mg

RobertEpiva
Гость
RobertEpiva

where to get diflucan diflucan 150 cost