PSR-1: Базовый стандарт кодирования
PSR (PHP Standards Recommendations) - это набор рекомендаций по программированию на языке PHP.
PSR-1 - это стандартные элементы кодирования, которые необходимы для обеспечения высокого уровня технической совместимости между общим PHP-кодом.
1. Общие положения
- В файлах НЕОБХОДИМО использовать только теги
<?php
и<?=
. - Файлы НЕОБХОДИМО представлять только в кодировке UTF-8 без BOM-байта.
- В файлах СЛЕДУЕТ либо объявлять структуры (классы, функции, константы и т.п.), либо генерировать побочные эффекты (выполнять действия) (например: передавать данные в выходной поток, модифицировать настройки и т.п.), но НЕ СЛЕДУЕТ делать одновременно и то, и другое.
- Имена пространств имён и имена классов ДОЛЖНЫ следовать стандарту автозагрузки PSR-0, PSR-4.
- Имена классов ДОЛЖНЫ быть объявлены с использованием т.н. StudlyCaps (каждое слово начинается с большой буквы, между словами нет разделителей).
- Константы классов ДОЛЖНЫ быть объявлены исключительно в верхнем регистре с использованием символа подчёркивания для разделения слов.
- Имена методов ДОЛЖНЫ быть объявлены с использованием т.н. camelCase (первое слово пишется в нижнем регистре, далее каждое слово начинается с большой буквы, а между словами нет разделителей).
2. Файлы
2.1. PHP-теги
Код PHP ДОЛЖЕН использовать длинные <?php ?>
теги или укороченные теги <?= ?>
Он НЕ ДОЛЖЕН использовать другие варианты тегов.
2.2. Кодировка символов
Код PHP ДОЛЖЕН использовать только UTF-8 без спецификации.
2.3. Побочные эффекты
Файл ДОЛЖЕН объявлять новые символы (классы, функции, константы и т. д.) и не вызывать никаких других побочных эффектов, или он ДОЛЖЕН выполнять логику с побочными эффектами, но НЕ ДОЛЖЕН делать и то, и другое.
Фраза побочные эффекты означает выполнение логики, не связанной напрямую с объявлением классов, функций, констант и т.д., просто за счет включения файла.
Побочные эффекты включают, помимо прочего: генерацию вывода, явное использование require
или include
, подключение к внешним службам, изменение настроек ini, выдачу ошибок или исключений, изменение глобальных или статических переменных, чтение или запись в файл и т.д.
Ниже приведен пример файла с объявлениями и побочными эффектами; т.е. пример того, чего следует избегать:
<?php
// побочный эффект: изменение настроек
ini_set('error_reporting', E_ALL);
// побочный эффект: подключение файла
include "file.php";
// побочный эффект: передача данных в выходной поток
echo "\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()
.
Ссылка на источник: https://www.php-fig.org/psr/psr-1/