ProfiPHPProfiPHP
  1. Главная
  2. Полезное в PHP
  3. Стандарты, стили и правила оформления кода PHP

Стандарты, стили и правила оформления кода PHP

Большинство программистов пишут код как им угодно. Отступы делают табуляциями, визуальный стиль как привыкли. И это не есть плохо, если над проектом работает исключительно один человек. Но если в последствии над написанным кодом будет работать другой программист? Ему будет очень непривычно и сложно разобраться в чужом коде, поэтому рекомендуется следовать стандартам написания кода, о которых и пойдет речь в данной статье.

Разберем стандарты, стили и правила оформления кода PHP, которые необходимы для обеспечения высокого уровня технической совместимости между общим кодом PHP. Действующие стандарты PHP программирования: PSR-2 и PSR-1. Они устанавливают правила синтаксиса, именования и оформления.

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

- Делайте отступы на каждом уровне и отделяйте логические блоки пустой строкой.

- По возможности максимально сокращайте вложенность кода и убирайте дублирование.

- Комментирование и документирование кода позволит зафиксировать всю необходимую информацию.

- Файлы должны использовать только теги <?php и <?=.
<?php
echo "Hello, World!";
?>
<?= "Hello, World!" ?>
- Файлы должны использовать только UTF-8 без спецификации для кода PHP.

- Для оформления отступов должны использоваться четыре пробела (но не знак табуляции).

- Недопустимо жестко ограничивать длину строки. Мягкое ограничение должно составлять 120 символов. Следует стараться, чтобы длина строки составляла 80 символов или менее. Если строка длиннее, рекомендуется использовать конкатенацию и перенос строк. В конце непустых строк не должно быть пробелов. В одной строке не должно быть более одного выражения.

- В конце каждого файла с PHP-кодом должна быть одна пустая строка.

- В файлах, содержащих только PHP-код, закрывающий тег ?> должен отсутствовать.

- Ключевые слова PHP должны быть написаны в нижнем регистре.

- Константы PHP true, false и null должны быть написаны в нижнем регистре.
$a = true;
$b = false;
$c = null;
- Операторы и ключевые слова отделять пробелами.
$x = 5;
$k = $x > 10 ? 2 : 4;

if ($k > 10)
echo '$k=' . $k;
- В файлах следует либо объявлять структуры (классы, функции, константы и т.п.), либо генерировать побочные эффекты (реализация логики, не связанной с объявлением классов, функций, констант, подключения внешнего файла). Например, следует избегать ситуации из следующего листинга, который содержит объявления структур и порождение побочных эффектов:
<?php
// побочный эффект: изменение настроек
ini_set('display_errors', '0');

// побочный эффект: подключение файла
require_once ("file.php");

// побочный эффект: передача данных в выходной поток
echo "Hello, World!";

// объявление
function foo()
{
// тело функции
}
Следующий пример демонстрирует файл рекомендуемой реализации с объявлениями без побочных эффектов:
<?php
// объявление
function foo()
{
// тело функции
}

// условное объявление не является побочным эффектом
if (! function_exists('bar')) {
function bar()
{
// тело функции
}
}
- Имена классов должны быть объявлены с использованием так называемой «СamelCase» (каждое слово начинается с большой буквы, между словами нет разделителей).
СаmеlСаsе - стиль получил название от англ. Camel (верблюд), то есть прописные буквы в названиях классов напоминают горбы верблюда. В русскоязычной литературе можно также встретить словосочетание "Верблюжий Стиль".

- Имена методов и Функций должны быть объявлены с использованием так называемой «camelCase» (первое слово пишется в нижнем регистре, далее каждое слово начинается с большой буквы, а между словами нет разделителей).

- Константы классов должны быть объявлены исключительно в верхнем регистре с использованием символа подчеркивания для разделения слов.
<?php
class Foo
{
const VERSION = '1.0';
const DATE_APPROVED = '2012-06-01';
}
- Для явного указания типа переменной использовать префикс отражающий их тип:
//Строки с префиксом str
$strName, $strLastName

//Массивы с префиксом ar
$arResult, $arParams, $arUser

//Объекты с префиксом ob
$obElement, $obUser

//Объекты БД CDBResult с префиксом db
$dbUser, $dbResult
- При множественной инициализации переменных выравнивать значения между ними по правому краю используя дополнительное пространство:
$x          = 10;
$arResult = array();
$strSearch = '';
$bFoundName = false;
- Каждый класс должен располагаться в отдельном файле и в пространстве имен с хотя бы одним верхним уровнем (именем производителя).

- Открывающая фигурная скобка "{" в определении класса должна располагаться на новой строке, а закрывающая фигурная "}" скобка должна располагаться на следующей строке после тела класса.
class Foo extends Bar implements FooInterface
{
}
- Открывающая фигурная скобка "{" в определении метода должна располагаться на новой строке, а закрывающая фигурная скобка "}" должна располагаться на следующей строке после тела метода.

- Тело каждой управляющей конструкции должно быть заключено в фигурные скобки "{...}". Это позволяет стандартизировать внешний вид управляющих конструкций и снизить риск возникновения ошибок при добавлении новых строк в тело конструкции.

- После ключевых слов в управляющих конструкциях (if, else, elseif, while, do-while, for, foreach, break, continue, switch, declare, return, require, include, require_once, include_once, goto) должен располагаться один пробел, а после вызовов функций и методов - не должен.
if ($a === $b) {
$foo->bar($arg1);
bar();
}
foreach ($iterable as $key => $value) {
// тело foreach
}
while ($expr) {
// тело конструкции
}
do {
// тело конструкции
} while ($expr);
for ($i = 0; $i < 10; $i++) {
// тело for
}
function foo($arg1, &$arg2, $arg3 = [])
{
// тело метода
}
- Между закрывающей круглой скобкой ")" и открывающей фигурной скобкой "{" должен быть один пробел.

- Открывающая фигурная скобка "{" в управляющих конструкциях должна располагаться в той же строке, что и сама конструкция, а закрывающая фигурная скобка "}" должна располагаться на следующей строке после тела конструкции.
<?php
if ($expr1) {
    // тело if
} elseif ($expr2) {
    // тело elseif
} else {
    // тело else
}
- После открывающей круглой скобки "(" и перед закрывающей круглой скобкой ")" в управляющих конструкциях не должно быть пробела.

- Список аргументов и переменных функции может быть разделен на несколько строк, каждая из которых дополнена слева одним отступом. В таком случае первый элемент списка должен начинаться с новой строки, и в каждой строке должен быть указан только один элемент.
<?php
$longArgs_noVars = function (
$longArgument,
$longerArgument,
$muchLongerArgument
) {
// тело
};
- В конструкции Switch выражение Case должно быть смещено на один отступ от Switch, а ключевое слово Break (или иное слово, обозначающее выход из конструкции) должно располагаться на том же уровне отступов, что и тело Case. В том случае, когда в непустом теле Case умышленно не используется Break, должен быть комментарий в стиле "// no break".
<?php
switch ($expr) {
    case 0:
        echo 'First case, with a break';
        break;
    case 1:
        echo 'Second case, which falls through';
        // no break
    case 2:
    case 3:
    case 4:
        echo 'Third case, return instead of break';
        return;
    default:
        echo 'Default case';
        break;
}
- Массивы форматировать в таком виде:
array(
'ID' => GetMessage('ID'),
'LOGIN' => GetMessage('CRM_LOGIN'),
'PASSWORD' => GetMessage('CRM_PASSWORD'),
);

Добавить комментарий

Имя:
Текст комментария: