Правила кодирования

Длина строки

Строки не более 120 символов

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

$arAuthResult = $USER->ChangePassword($USER_LOGIN, $USER_CHECKWORD,
$USER_PASSWORD, $USER_CONFIRM_PASSWORD, $USER_LID);
	
if (COption::GetOptionString("main", "new_user_registration", "N") == "Y"
	&& $_SERVER['REQUEST_METHOD'] == 'POST' && $TYPE == "REGISTRATION"
	&& (!defined("ADMIN_SECTION") || ADMIN_SECTION !== true)) {
	
$string = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod' .
	'tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,' .
	'quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo';
	

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

Тотальная табуляция.

Форматирование подчиненности

Блоки подчинённого кода сдвигаются относительно родителя на один знак табуляции.

function func() {
	if (condition) {
		while (condition2) {
		}
	}
}
	

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

Открывающая скобка на той же строке, что и прошлый оператор. Закрывающая фигурная на следующей, после блока.

function func() {
	return true;
}
	

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

Если нет иного кода в строке, то просто:

$str = !!$isProduct ? 'Купить' : 'Записаться';
	

Если встроен в другой код или строку, то необходимо включать его в скобки.

$str = 'Вы можете' . (!!$isProduct ? 'Купить' : 'Записаться');
	

Выражения

В каждой строке должно быть только одно выражение:

$a = $b; $b = $c; $c = $a;
	
$a = $b;
$b = $c;
$c = $a;
	
if ($isFrontPage) { echo ''; } else { echo 'На главную'; }
	
if ($isFrontPage) {
	echo '';
} else {
	echo 'На главную';
}
	
echo !$isFrontPage ? 'На главную' : '';
	

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

Строго писать только фигурные скобки и соблюдать правило подчинённости.

if (!$isFrontPage) echo 'На главную';
	
if (!$isFrontPage) {
	echo 'На главную';
}
	

Сложные условия

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

if ($APPLICATION->GetCurrentPage() === '/'
	&& strpos('/iblock/', $arResult['SECTIONS'][$i]['ITEMS'][$j]['PREVIEW_PICTURE']['SRC']) === false) {
	
$isFrontPage = $APPLICATION->GetCurrentPage() === '/';
$prevPicIsNotIblock = strpos('/iblock/', $arResult['SECTIONS'][$i]['ITEMS'][$j]['PREVIEW_PICTURE']['SRC']) === false;
if ($isFrontPage && $prevPicIsNotIblock) {
	

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

Массивы из двух и более элементов разбиваются на строки

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

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

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

Пробелы

При условии, что указанный случай не стоит в конце строки, то пробелы ставятся после запятых, точек с запятой (например, в for), до и после точки (конкатенация) до и после «=». Все операторы отбиваются с двух сторон от операндов одним пробелом. Табуляция в приведённых случаях запрещена.

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++)
	

Группировка операций в сложных операциях

Следует группировать операции, даже если это не требуется из-за приоритета операций:

$r = $a + ($b * $c);
	

Соглашение об именовании

Общие понятия

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

Сливать слова в одно необходимо по принципу: «lowerCamelCase». Собственно, его название — пример. Аббривиатуры тоже подчиняются этому правилу: getXmlEntity().

Необходимо давать имена максимально короткие, насколько это возможно без ущерба смыслу.

weightOfTheArea
	
areaWeight
	

Префиксы

Если необходимо указать тип переменной и это действительно необходимо для смысла, то стоит использовать префиксы: db, ar, str, int, float. Прежде чем использовать их, подумайте ещё раз: не очевидно ли, что это массив из названия элемента? Может быть тут другой тип данных?

Именование методов

Необходимо очевидно подчеркивать действие исполняемое методом. Привычными способами являются:

Именование классов

Только имя классов начинается с заглавной буквы:

user
	
User
	

Именование констант

Нонстанты пишутся прописными, слова разделяются подчёркиванием:

NEWS_COUNT_ON_HOME_PAGE
	

Комментарии

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

PHPDoc

Для описания классов, их методов и функций стоит использовать PHPDoc.

/**
* Gets a value that indicates whether a directory exists in the file system
*
* @param string $path - Path to the directory
* @return bool - True if the directory exists, false - otherwise
*/
	

Магические числа

Магическое число — любое число используемое в коде. Установка числа в математическом выражении магическим образом изменяет его. Каждое число несёт в себе определённый смысл, чем комментировать код, что тройка значит, что надо выводить три элемента, лучше написать NEWS_COUNT_ON_HOME_PAGE.

$task->Update($taskId, array('STATUS' => 3), 1);
	
$task->Update($taskId, array('STATUS' => CTaskStatus::New), TASK_PERMISSIONS_WRITE);