php Правила оформления кода - форматирование, отступы, пробелы

На основе стандарта PSR-2 (где и можно почитать о подробностях).

Отступы

Внутри каждого блока следует отступать на "1 таб", например:

// блок функции
function echo_pr($pr)
{
	echo $pr;
}

// блок условия (неполная форма)
if ($a > 2) {
	echo $pr;
}


// блок условия (полная форма)
if ($a > 2) {
	echo $pr;
}  else {
       echo "5";
}


//  вложение блоков (правило применяется рекурсивно)
// если после точки с запятой нет переноса строки - ставим пробел
for ($i = 1; $i < 5; $i++) {
	if ($a > 2) {
		echo $pr;
	}
}

Фигурные скобки вокруг "блоков" - тел управляющих конструкций

Такой поход позволяет в разы лучше видеть структуру программы, также следует отметить, что даже без использования фигурных скобок вокруг тела цикла его тело всё равно должно выделяться отступом:

while (list($key, $value) = each($fruits))
    echo "Индекс: $key; Значение: $value\n"; // единственное действие в теле цикла

-- то есть синтаксис языка программирования позволяет php позволяет так писать, но стандарт PSR-2 требует, чтобы:

Тело каждой управляющей конструкции ДОЛЖНО быть заключено в фигурные скобки. Это позволяет стандартизировать внешний вид управляющих конструкций с снизить риск возникновения ошибок при добавлении новых строк в тело конструкции.

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

while (list($key, $value) = each($fruits)) {
    echo "Индекс: $key; Значение: $value\n"; // единственное действие в теле цикла
}

Пробелы и их соседи

Функции

После имени функции перед скобками пробел не ставим (также как не ставим после открывающей и перед закрывающей скобками):

function meFuncName($a, $b)
{
   // код
   return $a + $b;
}

Аналогично и при вызове функции:

$a = meFuncName($a, $b);

Массивы

После имени массива перед квадратной скобкой пробел не нужен:

$arr[5] = 25;

Операторы

Вокруг операторов пробелы ставим (а перед точкой с запятой нет):

$a = $b + $c * $d;

После запятой пробел ставим, а перед - нет (с точкой же - как с обычным оператором):

echo $c . $b . $a;
echo $c, $b, $a;

С другой стороны с запятой, когда речь идёт о повторном вызове операции echo, тоже можно работать как с обычным оператором (на ваш выбор):

echo $c , $b , $a;

Но (!) при перечислении аргументов функции -- строго по правилу:

function($a, $b, $value, $value2)
{
   // код
}

Фигурные скобки для разных блоков

Для блоков функций и классов открывающая фигурная скобка ставится на новой строке:

// блок функции
function echo_pr($pr)
{
	echo $pr;
}

Класс:

class MyClass
{
    public $first;
    public $second = 3; // переменная со значением по умолчанию
    const pi = 3.1415926; // констанкта
 
    public function save($param1) 
    { 
        // метод (функция)
    }
}

А для всех остальных блоков на той же строке что и оператор блока, например -- для цикла while:

// блок функции
while (a<b) {
    echo $a;
    $a = $a + 1;
}

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

Именование переменных не относится к PSR-2, но всё же авторы этих строк рекомендуют следующее соглашение по именованию.

moberaptor's picture

Те, кто до этого изучал Delphi, обратите, пожалуйста, внимание, что отступ оформляется 4 пробелами!

vedro-compota's picture

ну обычно используют 1 таб. А вот IDE уже настраивают чтобы этот таб конвертировался в 4 пробела, например.

_____________
матфак вгу и остальная классика =)

moberaptor's picture

У дельфистов немного по другому, там tab не конвертируется и стандарт два пробела, пруф