Я знаю, что эта тема была написана много. Но я думаю, что это так важно, что я хотел продолжать в том же духе и продолжать его продвигать.
Сообщество PHP прилагает большие усилия для обеспечения соблюдения стандартов кодирования. Цель этого состоит в том, чтобы упростить поддержку взаимодействия структур. Это также помогает разработчикам понимать и читать код, если он придерживается определенного набора правил. Java уже долгое время имела форму JCP, создавая JSR, чтобы предлагать изменения языка, а также создание API. Это аналогичное усилие.
 
 PSR-0 имел большой успех, и теперь у них есть 2 новых предложения, которые называются
  PSR-1 и
  PSR-2 .
 
PSR-0
Он описывает стандарт, который необходимо соблюдать для определения автозагрузчиков классов. Я кратко объясню каждый из них:
 
- Полное пространство имен и класс должны иметь следующую структуру
 
\ \ () * \
Пространства имен полезны в PHP, чтобы избежать коллизий при загрузке имен классов. Когда я пишу код API или библиотеки, я уже склонен следовать этому формату. Например, класс в библиотеке аутентификации может иметь пространство имен, подобное следующему:
  net \ rt \ toolkit \ auth \ LoginService .
 
Где: 
  
 net \ rt — это имя поставщика,
  
 auth — это пространство имен. 
  
 LoginService — это имя класса.
 
- Каждое пространство имен должно иметь пространство имен верхнего уровня («Имя поставщика»).
 - Каждое пространство имен может иметь столько подпространств, сколько пожелает.
 - Каждый разделитель пространства имен преобразуется в DIRECTORY_SEPARATOR при загрузке из файловой системы.
 - Каждый символ «_» в ИМЯ КЛАССА преобразуется в DIRECTORY_SEPARATOR. Символ «_» не имеет особого значения в пространстве имен.
 - При загрузке из файловой системы к полному пространству имен и классу добавляется суффикс «.php». Буквенные символы в именах поставщиков, пространствах имен и именах классов могут состоять из любой комбинации строчных и прописных букв.
 
 Для проверки вашего соответствия этому стандарту вы можете использовать следующую функцию:
 
function autoload($className)
{
    $className = ltrim($className, '\\');
    $fileName  = '';
    $namespace = '';
    if ($lastNsPos = strripos($className, '\\')) {
        $namespace = substr($className, 0, $lastNsPos);
        $className = substr($className, $lastNsPos + 1);
        $fileName  = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
    }
    $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';
 
    require $fileName;
}
PSR-1
 
Большинство из них говорят сами за себя, я попытался добавить больше деталей к тем, которые не являются:
  
- Файлы ДОЛЖНЫ использовать только теги.
 - Файлы ДОЛЖНЫ использовать только UTF-8 без спецификации для кода PHP.
 
BOM (метка порядка байтов) — это символ, который указывает порядок байтов потока. Стандарт Unicode разрешает использование спецификации,
но не
требует и не рекомендует ее использование .
Порядок байтов не имеет значения в UTF-8
, он служит только для идентификации текстового потока или файла как UTF-8.
- Файлы должны либо DECLARE символы (классы, функции, константы и т.д.) или вызывают побочные эффекты (например , генерировать выходной сигнал, изменения .ini настройки и т.д.) , но не должны делать оба.
 
Это также служит для хранения классов с функциями и константами в их отдельных файлах. Если файл изменяет настройки .ini, попросите этот файл просто сделать это и укажите ясное имя, что это файл конфигурации.
- Пространства имен и классы ДОЛЖНЫ следовать PSR-0 (см. Выше).
 - Имена классов ДОЛЖНЫ быть объявлены в StudlyCaps.
 - Константы класса ДОЛЖНЫ быть объявлены в верхнем регистре с разделителями подчеркивания.
 - Имена методов ДОЛЖНЫ быть объявлены в camelCase.
 
PSR-2
- Код ДОЛЖЕН соответствовать PSR-1 (см. Выше)
 - Код ДОЛЖЕН использовать 4 пробела для отступа, а не табуляции.
 - НЕ ДОЛЖНО быть жесткого ограничения на длину линии; мягкий предел ДОЛЖЕН быть 120 символов; строки ДОЛЖНЫ быть 80 символами или меньше.
 - ДОЛЖНА быть одна пустая строка после объявления пространства имен, и ДОЛЖНА быть одна пустая строка после объявления блока использования.
 - Открывающие скобки для классов ДОЛЖНЫ идти на следующую строку, а закрывающие скобки ДОЛЖНЫ идти на следующую строку после тела (не так критично).
 - Открывающие скобки для методов ДОЛЖНЫ идти на следующую строку, а закрывающие скобки ДОЛЖНЫ идти на следующую строку после тела (не так критично).
 - Видимость ДОЛЖНА быть объявлена для всех свойств и методов; абстрактный и окончательный ДОЛЖНЫ быть объявлены до видимости; статический ДОЛЖЕН быть объявлен после видимости.
 - Ключевые слова структуры управления ДОЛЖНЫ иметь один пробел после них; вызовы методов и функций НЕ ДОЛЖНЫ.
 - Открывающие скобки для управляющих структур ДОЛЖНЫ идти на одной строке, а закрывающие скобки ДОЛЖНЫ идти на следующей строке после тела.
 - Открывающие скобки для управляющих структур НЕ ДОЛЖНЫ иметь после них пробел, а закрывающие скобки для управляющих структур НЕ ДОЛЖНЫ иметь пробел.
 
Ниже приведен пример того, как должен выглядеть класс после применения некоторых принципов, описанных здесь, в их примере в скобках были несоответствия, поэтому я исправил их здесь:
namespace Vendor\Package;
use FooInterface;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;
class Foo extends Bar implements FooInterface
{
    public function sampleFunction($a, $b = null)
    {
        if ($a === $b)  
        {
            bar();
        } 
        elseif ($a > $b)  
        {
            $foo->bar($arg1);
        }
        else 
        {
            BazClass::bar($arg2, $arg3);
        }
    }
    final public static function bar()
    {
        // method body
    }