Стандарты кодирования PHP (PSR)
Категория: / DEV Блог
/ PHP (LAMP)
Группа взаимодействия фреймворков (PHP-FIG) окончательно приняла рекомендации к стандартам оформления кода на PHP.
Документ называется PSR (Proposing a Standards Recommendation - Предлагаемые рекомендации стандартов) и разделен на 3 части.
Оригинальные тексты можно посмотреть на гитхабе.
Вкратце,
PSR-0: требования к названиям классов
и неймспейсов для универсального автозагрузчика.
Полное имя класса должно быть вида `\<Vendor Name>\(<Namespace>\)*<Class Name>`
PSR-1: Основные стандарты кодирования
Секция описывает общие правила оформления кода:
- Использование только тэгов <?php и <?=
- Только UTF-8 без BOM для пхп кода
- Не стоит мешать разный функционал в одном файле
- NS и классы должны следовать psr-0
- классы объявляются в `StudlyCase`
- методы объявляются в lower `camelCase`
- константы объявляются в ТАКОМ_ВИДЕ
К свойствам класса не предъявляется требований, они могут объявляться в любом виде,
важно чтобы стиль был однотипным для всего проекта.
PSR-2: Стандарты оформления кода
Собственно представляет собой требования к оформлению кода:
- код должен пользовать 4 пробела вместо ТАБ для отделения кода
- длина строки не более 80 символов, ну 120 в крайнем случае
- пустая строка после объявления NS и USE блока
- открывающая скобка `{` объявления класса и методов должна находится на следующей строке, а закрывающая `}` на следующей строке после кода
- для всех свойств и методов обязательно указывать видимость;
ключевые слова `abstract` и `final` указываются до объявления видимости, а `static` после
- После управляющих ключевых слов (команд языка) должен ставиться пробел, не ставится после вызова методов и функций
- Открывающие скобки `{` для команд ставятся на одной строке с ключевым словом, а закрывающая `}` на следующей строке после кода
- Скобки команд `()` не должны начинаться и заканчиваться пробелами
Интерфейсы должны заканчиваться на `Interface`: например, Psr\Foo\BarInterface.
Абстрактные классы должны начинаться на `Abstract`: например, Psr\Foo\AbstractBar.
Трейты должны заканчиваться на `Trait`: например, Psr\Foo\BarTrait.
Пример оформления:
В голосовании по принятию стандартов участвовали разработчики таких проектов, как
Agavi
CakePHP, CakePHP 2
Chisimba, C4
Composer, Packagist
Doctrine, Doctrine2, et al.
Drupal
eZ Publish
FLOW3
Joomla
Lithium
PEAR, PEAR2
phpBB
PPI, PPI2
Propel, Propel 2
SabreDAV
Solar Framework, Aura Project
Symfony, Symfony2
Zend Framework, Zend Framework 2
Zikula
Соответствование требованием конкретных проектов можно посмотреть на
гугл докс
Документ называется PSR (Proposing a Standards Recommendation - Предлагаемые рекомендации стандартов) и разделен на 3 части.
Оригинальные тексты можно посмотреть на гитхабе.
Вкратце,
PSR-0: требования к названиям классов
и неймспейсов для универсального автозагрузчика.
Полное имя класса должно быть вида `\<Vendor Name>\(<Namespace>\)*<Class Name>`
`\Symfony\Core\Request` => `/path/to/project/lib/vendor/Symfony/Core/Request.php`
`\Zend\Acl` => `/path/to/project/lib/vendor/Zend/Acl.php`
`\namespace\package_name\Class_Name` => `/path/to/project/lib/vendor/namespace/package_name/Class/Name.php`
PSR-1: Основные стандарты кодирования
Секция описывает общие правила оформления кода:
- Использование только тэгов <?php и <?=
- Только UTF-8 без BOM для пхп кода
- Не стоит мешать разный функционал в одном файле
- NS и классы должны следовать psr-0
- классы объявляются в `StudlyCase`
- методы объявляются в lower `camelCase`
- константы объявляются в ТАКОМ_ВИДЕ
К свойствам класса не предъявляется требований, они могут объявляться в любом виде,
важно чтобы стиль был однотипным для всего проекта.
PSR-2: Стандарты оформления кода
Собственно представляет собой требования к оформлению кода:
- код должен пользовать 4 пробела вместо ТАБ для отделения кода
- длина строки не более 80 символов, ну 120 в крайнем случае
- пустая строка после объявления NS и USE блока
- открывающая скобка `{` объявления класса и методов должна находится на следующей строке, а закрывающая `}` на следующей строке после кода
- для всех свойств и методов обязательно указывать видимость;
ключевые слова `abstract` и `final` указываются до объявления видимости, а `static` после
- После управляющих ключевых слов (команд языка) должен ставиться пробел, не ставится после вызова методов и функций
- Открывающие скобки `{` для команд ставятся на одной строке с ключевым словом, а закрывающая `}` на следующей строке после кода
- Скобки команд `()` не должны начинаться и заканчиваться пробелами
Интерфейсы должны заканчиваться на `Interface`: например, Psr\Foo\BarInterface.
Абстрактные классы должны начинаться на `Abstract`: например, Psr\Foo\AbstractBar.
Трейты должны заканчиваться на `Trait`: например, Psr\Foo\BarTrait.
Пример оформления:
<?php
namespace Vendor\Package;
use FooInterface;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;
class Foo extends Bar implements FooInterface
{
public function sampleFunction($a, $b = null)
{
if ($a === $b) {
bar();
} elseif ($a > $b) {
$foo->bar($arg1);
} else {
BazClass::bar($arg2, $arg3);
}
}
final public static function bar()
{
// method body
}
}
В голосовании по принятию стандартов участвовали разработчики таких проектов, как
Agavi
CakePHP, CakePHP 2
Chisimba, C4
Composer, Packagist
Doctrine, Doctrine2, et al.
Drupal
eZ Publish
FLOW3
Joomla
Lithium
PEAR, PEAR2
phpBB
PPI, PPI2
Propel, Propel 2
SabreDAV
Solar Framework, Aura Project
Symfony, Symfony2
Zend Framework, Zend Framework 2
Zikula
Соответствование требованием конкретных проектов можно посмотреть на
гугл докс
- что у вас разъедется / вы таблицы рисуете в коде ?
- все всегда прекрасно..
- про стандарты согласен..
- созданы они для того, чтобы им следовать..
- идиотизм, когда с n-файлом работает несколько разработчиков..
- вы пишите один класс/интерфейс всей командой ?
- написал класс.. написал комментарии.. все..
- чего тебе нужно в чужом коде ?