Этот раздел стандарта содержит то, что следует считать стандартными элементами кодирования, которые требуются для обеспечения высокого уровня технической совместимости между общим кодом PHP.
Ключевые слова “ДОЛЖЕН”, “НЕ ДОЛЖЕН”, “ТРЕБУЕТСЯ”, “ДОЛЖЕН”, “НЕ ДОЛЖЕН”, “СЛЕДУЕТ”, “НЕ СЛЕДУЕТ”, “РЕКОМЕНДУЕТСЯ”, “МОЖЕТ” и “НЕОБЯЗАТЕЛЬНО” в этом документе следует толковать так, как описано в RFC 2119.
1. Обзор
-
Файлы ДОЛЖНЫ использовать только теги
<?phpи<?=. -
Файлы ДОЛЖНЫ использовать только UTF-8 без BOM для кода PHP.
-
Файлы ДОЛЖНЫ либо объявлять символы (классы, функции, константы и т. д.), либо вызывать побочные эффекты (например, генерировать вывод, изменять настройки .ini и т. д.), НО НЕ ДОЛЖНЫ делать и то, и другое.
-
Пространства имен и классы ДОЛЖНЫ следовать “автозагрузке” PSR: [PSR-0, PSR-4].
-
Имена классов ДОЛЖНЫ быть объявлены в
StudlyCaps. -
Константы классов ДОЛЖНЫ быть объявлены в верхнем регистре с разделителями подчеркивания.
-
Имена методов ДОЛЖНЫ быть объявлены в
camelCase.
2. Файлы
2.1. Теги PHP
PHP-код ДОЛЖЕН использовать длинные <?php ?> теги или короткие-echo <?= ?> теги; он НЕ ДОЛЖЕН использовать другие вариации тегов.
2.2. Кодировка символов
PHP-код ДОЛЖЕН использовать только UTF-8 без BOM.
2.3. Побочные эффекты (Side Effects)
Файл ДОЛЖЕН объявлять новые символы (классы, функции, константы и т. д.) и не вызывать никаких других побочных эффектов, или он ДОЛЖЕН выполнять логику с побочными эффектами, но НЕ ДОЛЖЕН делать и то, и другое.
Фраза “побочные эффекты” (Side Effects) означает выполнение логики, не связанной напрямую с объявлением классов, функций, констант и т. д., просто от включения файла.
«Побочные эффекты» включают, но не ограничиваются: генерацией вывода, явным использованием 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. Имена пространств имен и классов
Пространства имен и классы ДОЛЖНЫ следовать “автозагрузке” (autoloading) PSR: [PSR-0, PSR-4].
Это означает, что каждый класс находится в файле сам по себе и находится в пространстве имен как минимум одного уровня: имя поставщика верхнего уровня.
Имена классов ДОЛЖНЫ быть объявлены в StudlyCaps.
Код, написанный для PHP 5.3 и более поздних версий, ДОЛЖЕН использовать формальные пространства имен.
Например:
<?php
// PHP 5.3 и более поздние версии:
пространство имен Vendor\Model;
class Foo
{
}
Код, написанный для 5.2.x и более ранних версий, ДОЛЖЕН использовать соглашение о псевдопространстве имен Vendor_ в именах классов.
<?php
// PHP 5.2.x и более ранних версий:
class Vendor_Model_Foo
{
}
4. Константы, свойства и методы класса
Термин «Class» относится ко всем классам, интерфейсам и трейтам.
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. Методы
Имена методов ДОЛЖНЫ быть объявлены