Запись опубликована
ostretsov.ru. You can comment here or
there.
PSR - это аббривиатура от Proposing a Standards Recommendation (предлагаемые рекомендации стандартов). Можно считать, что это устявшиеся стандарты, потому что в одобрении их принимали участие разработчики из известнейших проектов: Drupal, phpBB, PEAR, Joomla, Symfony и т.д. Объединившись, они создали PHP-FIG (Framework Interoperability Group - группа совместимости фреймворков). Я работаю, например, с Symfony2.1 и уже привык ко всему тому, что описано в предлагаемых рекомендация по оформлению кода.
На настоящий момент принято 3и стандарта:
https://github.com/php-fig/fig-standards/tree/master/accepted.
Если коротко, то PSR-0 описывает именование классов в пространствах имен для их autoload`инга. Оно должно быть таким:
[plain]
\<Поставщик>\(<Пространство имен>\)*<Имя класса>
[/plain]
Символ “_” в имени класса конвертируется в DIRECTORY_SEPARATOR.
Проще всего понять на примерах:
[plain]
\Doctrine\Common\IsolatedClassLoader => /path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php
\Symfony\Core\Request => /path/to/project/lib/vendor/Symfony/Core/Request.php
\Zend\Acl => /path/to/project/lib/vendor/Zend/Acl.php
\Zend\Mail\Message => /path/to/project/lib/vendor/Zend/Mail/Message.php
\namespace\package\Class_Name => /path/to/project/lib/vendor/namespace/package/Class/Name.php
\namespace\package_name\Class_Name => /path/to/project/lib/vendor/namespace/package_name/Class/Name.php
[/plain]
Итак, PSR-1.
- Файлы только в UTF-8 без BOM.
- Допустимы только теги
- Не допустимо смешивать в одном файле объявления классов, функций, констант и делать echo, ini_set и т.д. Т.е. не мешать все в кучу.
- Именовать классы НадоТак
- Константы класса ДОЛЖНЫ_БЫТЬ_ТАКИМИ
- Методы должны бытьТакими
И, наконец, PSR-2.
- Для отступов использовать 4 пробела вместо табуляции.
- Желательно, чтобы строка не была длиннее 120 символов.
- Нужно оставить пустую строку после use и блока namespace директив.
- Фигурная скобка ‘{‘ должна быть на следующей строке после объявления имени класса, а закрывающая ‘}’ должна быть на следующей строке после тела класса.
- Тот же порядок соблюдать для функций
- public/protected/private (видимость) объявлять явно у каждого метода и функции класса; abstract/final объявлять до видимости; static объявлять после видимости. Например, final public static boo().
- Разделять пробелом имя управляющей конструкции (if, elseif, while, for, foraech, try-catch) и скобку. Не допустимы пробелы между круглыми скобками и их содержимым. Фигурные же скобки распологать как в примере:
[php]
if ($foo == true) {
return false;
}
[/php]
На гитхабе можно найти больше примеров. Благодаря стройному коду Symfony2 я окзалася заочно обучен этим PSR-x :).