Стандарты кодирования

Стандарт кодирования - Coding Style или Стиль программирования - Programming style.

К стандартам кодирования можно отнести правила именования классов, количество отступов или табуляции.

Обычно каждый класс хранится в отдельно созданном для него файле, вместо того чтобы каждый файл (класс) включать в файл инициализации - применяют функцию автозагрузки. Функция автозагрузки вызывается в тех случаях, когда в сценарии делается попытка создания экземпляра класса, но сам класс к этому времени еще не был загружен. То есть это средство позволяет загружать файлы в сценарий по требованию.

Имя класса должно содержать путь к файлу с описанием класса, например класс с именем MyClass_Users должен располагаться в директории MyClass и файл должен иметь имя Users.php. Символы нижнего подчеркивания допустимы в местах разделителей пути - имя файла "Zend/Db/Table.php" должно указывать на класс с именем "Zend_Db_Table".

Стандарт PSR-0/1/2 для PHP

Homepage: PSR-0/1/2 и RU: PSR-0/1/2

PSR (Proposing a Standards Recommendation) рекомендации к стандартам оформления кода на PHP принятые группой взаимодействия фреймворков PHP-FIG. Сводную таблицу соответствия требованиям различных PHP проектов стандарту PSR можно посмотреть по ссылке PHP Coding Style Notes.

Стандарт PSR состоит из трех разделов:

  1. PSR-0 - Стандарт описывает именование классов в пространствах имен (namespace) для их автозагрузки. Имя класса должно содержать путь к файлу с описанием класса, например класс с именем MyClass_Users должен располагаться в директории MyClass и файл должен иметь имя Users.php. Т.е. символ нижнее подчеркивание "_" в имени класса заменяется на DIRECTORY_SEPARATOR (разделитель директорий).
    \namespace\package_name\MyClass_Users => /path/to/project/lib/vendor/namespace/package_name/MyClass/Users.php
  2. PSR-1 - Базовые стандарты оформления кода. Секция описывает общие правила оформления кода.
    • Namespaces and classes должны отвечать PSR-0
    • Использование только тэгов <?php ?> и <?= ?>
    • Только UTF-8 без BOM для PHP кода
    • Не допустимо смешивать в одном файле объявления классов, функций, констант и делать echo, ini_set и т.д. Т.е. не мешать все в кучу.
    • Именовать классы НадоТак
    • Константы класса ДОЛЖНЫ_БЫТЬ_ТАКИМИ
    • Методы должны бытьТакими
  3. PSR-2 - Руководство по Code Style. Ниже только часть правил, остальные смотреть на GitHub.
    • Обязан соответствовать PSR-1.
    • Для отступов использовать 4 пробела вместо табуляции.
    • Желательно, чтобы строка не была длиннее 120 символов.
    • Нужно оставить пустую строку после use и блока namespace директив.
    • Фигурная скобка ‘{‘ должна быть на следующей строке после объявления имени класса, а закрывающая ‘}’ должна быть на следующей строке после тела класса.
    • Тот же порядок соблюдать для функций
    • public/protected/private (видимость) объявлять явно у каждого метода и функции класса; abstract/final объявлять до видимости; static объявлять после видимости. Например, final public static boo().
    • Разделять пробелом имя управляющей конструкции (if, elseif, while, for, foraech, try-catch) и скобку. Не допустимы пробелы между круглыми скобками и их содержимым. Первая фигурная скобка в конце строки, например:
      if ($a === $b) {
          return false;
      }

Пакет CodeSniffer позволяет определить отвечает ли ваш код стандарту кодирования, например PEAR, Zend, PSR-1/2 и др. для файлов PHP, JavaScript и Основы работы с CSS. Он также позволяет создать свой стандарт кодирования и применять его к своим проектам. При помощи плагина phpcsmd CodeSniffer интегрируется в IDE NetBeans.

  • Установка PHP_CodeSniffer из репозитория ОС
    # aptitude install php-codesniffer
  • Установка PHP_CodeSniffer последней версии из PEAR
    # pear install PHP_CodeSniffer
    # phpcs --version
    PHP_CodeSniffer version 1.4.0 (stable) by Squiz Pty Ltd. (http://www.squiz.com.au)
  • Ключ -i позволяет вывести стандарты кодирования, которые поддерживает пакет CodeSniffer (PHPCS, PSR1, PEAR, Zend, MySource, PSR2, Squiz):
    $ phpcs -i
    The installed coding standards are PHPCS, PSR1, PEAR, Zend, MySource, PSR2 and Squiz
  • Проверим файл на соответствие стандарту PEAR Coding Standards и выведем только суммарную информацию
    $ phpcs --standard=PEAR --report=summary /tmp/viewfiles.php 
    
    PHP CODE SNIFFER REPORT SUMMARY
    --------------------------------------------------------------------------------
    FILE                                                            ERRORS  WARNINGS
    --------------------------------------------------------------------------------
    /tmp/viewfiles.php                                              25      15
    --------------------------------------------------------------------------------
    A TOTAL OF 25 ERROR(S) AND 15 WARNING(S) WERE FOUND IN 1 FILE(S)
    --------------------------------------------------------------------------------
    
PQ VPS сервера в 28+ странах.