PSR-1: базовый стандарт кодирования (PSR-1: Basic Coding Standart)

Этот раздел стандарта включает то, что следует рассматривать как стандартные элементы кодирования, необходимые для обеспечения высокого уровня технической совместимости между общим кодом PHP.

Ключевые слова “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, и “OPTIONAL” в этом документе являются следует интерпретировать, как описано в RFC 2119 .

1. Обзор

  • Файлы должны использовать только <?phpи <?=тег.
  • Файлы ДОЛЖНЫ использовать только UTF-8 без спецификации для кода PHP.
  • Файлы должны либо DECLARE символы (классы, функции, константы и т.д.) или вызывают побочные эффекты (например , генерировать выходной сигнал, изменения .ini настройки и т.д.) , но не должны делать оба.
  • Пространства имен и классы ДОЛЖНЫ следовать «автозагрузке» PSR: [ PSR-0 , PSR-4 ].
  • Имена классов ДОЛЖНЫ быть объявлены в StudlyCaps.
  • Константы классов ДОЛЖНЫ быть объявлены в верхнем регистре с разделителями подчеркивания.
  • Имена методов ДОЛЖНЫ быть объявлены в camelCase.

2. Файлы

2.1. Теги PHP

Код PHP ДОЛЖЕН использовать длинные <?php ?>теги или теги short-echo <?= ?>; он НЕ ДОЛЖЕН использовать другие варианты тегов.

2.2. Кодировка символов

Код PHP ДОЛЖЕН использовать только UTF-8 без спецификации.

2.3. Побочные эффекты

В файле СЛЕДУЕТ объявлять новые символы (классы, функции, константы и т. Д.) И не вызывать других побочных эффектов, или он ДОЛЖЕН выполнять логику с побочными эффектами, но НЕ ДОЛЖЕН делать и то, и другое.

Фраза «побочные эффекты» означает выполнение логики, не связанной напрямую с объявлением классов, функций, констант и т. Д., Просто путем включения файла .

«Побочные эффекты» включают, но не ограничиваются: генерацию вывода, явное использование requireили include, подключение к внешним службам, изменение настроек ini, выдачу ошибок или исключений, изменение глобальных или статических переменных, чтение или запись в файл и т. Д. .

Ниже приведен пример файла с объявлениями и побочными эффектами; т.е. пример того, чего следует избегать:

<?php
// side effect: change ini settings
ini_set('error_reporting', E_ALL);

// side effect: loads a file
include "file.php";

// side effect: generates output
echo "<html>\n";

// declaration
function foo()
{
    // function body
}

В следующем примере показан файл, содержащий объявления без побочных эффектов; т.е. пример того, что подражать:

<?php
// declaration
function foo()
{
    // function body
}

// conditional declaration is *not* a side effect
if (! function_exists('bar')) {
    function bar()
    {
        // function body
    }
}

3. Пространство имен и имена классов

Пространства имен и классы ДОЛЖНЫ следовать «автозагрузке» PSR: [ PSR-0 , PSR-4 ].

Это означает, что каждый класс находится в файле сам по себе и находится в пространстве имен по крайней мере одного уровня: имя поставщика верхнего уровня.

Имена классов ДОЛЖНЫ быть объявлены в StudlyCaps.

Код, написанный для PHP 5.3 и более поздних версий, ДОЛЖЕН использовать формальные пространства имен.

Например:

<?php
// PHP 5.3 and later:
namespace Vendor\Model;

class Foo
{
}

В коде, написанном для 5.2.x и ранее, СЛЕДУЕТ использовать соглашение Vendor_о псевдонимах префиксов в именах классов.

<?php
// PHP 5.2.x and earlier:
class Vendor_Model_Foo
{
}

4. Константы, свойства и методы класса.

Термин «класс» относится ко всем классам, интерфейсам и характеристикам.

4.1. Константы

Константы классов ДОЛЖНЫ быть объявлены в верхнем регистре с разделителями подчеркивания. Например:

<?php
namespace Vendor\Model;

class Foo
{
    const VERSION = '1.0';
    const DATE_APPROVED = '2012-06-01';
}

4.2. Характеристики

Это руководство намеренно избегает каких — либо рекомендаций относительно использования $StudlyCaps$camelCase или $under_score имен свойств.

Какое бы соглашение об именах ни использовалось, СЛЕДУЕТ применять последовательно в разумных пределах. Эта область может быть на уровне поставщика, на уровне пакета, на уровне класса или на уровне метода.

4.3. Методы

Имена методов ДОЛЖНЫ быть объявлены в camelCase()