PSR-12: Extended Coding Style

  • This specification extends, expands and replaces PSR-2, the coding style guide and requires adherence to PSR-1, the basic coding standard.
  • All PHP files MUST use the Unix LF (linefeed) line ending only.
  • All PHP files MUST end with a non-blank line, terminated with a single LF.
  • The closing ?> tag MUST be omitted from files containing only PHP.
  • There MUST NOT be a hard limit on line length.
  • The soft limit on line length MUST be 120 characters.
  • Lines SHOULD NOT be longer than 80 characters; lines longer than that SHOULD be split into multiple subsequent lines of no more than 80 characters each.
  • There MUST NOT be trailing whitespace at the end of lines.
  • Blank lines MAY be added to improve readability and to indicate related blocks of code except where explicitly forbidden.
  • There MUST NOT be more than one statement per line.
  • Code MUST use an indent of 4 spaces for each indent level, and MUST NOT use tabs for indenting.
  • All PHP reserved keywords and types MUST be in lower case.
  • Any new types and keywords added to future PHP versions MUST be in lower case.
  • Short form of type keywords MUST be used i.e. bool instead of booleanint instead of integer etc.

Всеки PHP файл трябва да следва следната стуктура:

  • започва с <?php
  • File-level docblock
  • One or more declare statements като например declare(strict_types=1);
  • Неймспесът на файла
  • use стейтмънти в следният ред – class-based use,  function-based use, constant-based use, разделени с празен ред за прегледност
  • самият код на файла
  • <?php тагът трябва да е на свой отделен ред само когато е първият такъв за файла, но не и ако например имаме вграден HTML код в PHP кода
  • import/require трябва да съдържат винаги само fully qualified пътища
  • Compound namespaces трябва да имат дълбочина, максимално 2
  • Като инстанцираме клас, на същият ред не трябва да имаме коментари. Т.е. след new Foo(); // не може!
  • The extends and implements keywords MUST be declared on the same line as the class name
  • The opening brace for the class MUST go on its own line and MUST NOT be preceded or followed by a blank line;
    the closing brace for the class MUST go on the next line after the body and MUST NOT be preceded by a blank line.
  • Ако даден клас имплементира повече от 1 интерфейс, те могат (не задължително) да са на отделни редове и да са индентирани веднъж.
  • use за трейтове трябва да е на следващият ред след отварящата скоба на класа. Ако са повече от един трейт – всеки един на отделен ред и със свое use.
  • Visibility MUST be declared on all properties, constants and methods.
  • There MUST NOT be more than one property declared per statement.
  • Property and method names MUST NOT be prefixed with a single underscore to indicate protected or private visibility. That is, an underscore prefix explicitly has no meaning.
  • abstract and final declarations MUST precede the visibility declaration.
  • static declaration MUST come after the visibility declaration.
  • след името на метода или функцията не трябва да има интервал(и), както и в скобите с параметрите след и преди отварящата и затварящата скоба. Както и трябва да има по един интервал между параметрите.
    public function fooBarBaz($arg1, &$arg2, $arg3 = [])
  • същото важи и при викане на функция или метод – bar();, а не bar ();
  • параметрите на метод или функция могат да са на отделен ред всеки, като
    ) и { след тях трябва да са на един ред.
    Както и типът на връщаният резултат, напр. ): string {
  • There MUST NOT be a space between the variadic three dot operator and the argument name – public function process(string $algorithm, …$parts)
  • при викане на метод или функция, аргументите могат да са на отделен ред като първият аргумент също трябва да е на нов ред.
  • Closures MUST be declared with a space after the function keyword, and a space before and after the use keyword.
  • и т.н…

Литература:

https://www.php-fig.org/psr/psr-12/