PSR-0/1/2. Стандарты оформления кода в PHP все-таки есть! :)

Sep 03, 2012 17:47


Запись опубликована 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 :).

Тяжело в учении, легко в бою!

Previous post Next post
Up