Стандарт PHP PSR-1: Базовый стандарт разработки Павел Федорук, 02 ноября 2022 в 23:36
PHP

Стандарт PSR-1: Базовый стандарт разработки

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

Ключевые слова «ДОЛЖЕН», «НЕ ДОЛЖЕН», «ТРЕБУЕТСЯ» и т.д. в этом документе интерпретируются, как описано в RFC 2119.

1. Обзор

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

2. Файлы

2.1. PHP Тэги

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

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

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

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

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

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

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

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

<?php
// побочный эффект: изменение конфигурации ini 
ini_set('error_reporting', E_ALL);

// побочный эффект: загрузка файла
include "file.php";

// побочный эффект: генерация вывода
echo "<html>\n";

// декларация функции
function foo()
{
    // тело функции
}

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

<?php
// декларация функции
function foo()
{
    // тело функции
}

// условное объявление *не* побочный эффект
if (! function_exists('bar')) {
    function bar()
    {
        // тело функции
    }
}

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

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

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

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

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

Например:

<?php
// PHP 5.3 и более поздние:
namespace Vendor\Model;

class Foo
{
}

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

<?php
// PHP 5.2.x и более ранние:
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().

Другие рецепты

Если вдруг, вы еще их не читали