- 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 ofboolean
,int
instead ofinteger
etc.
Всеки PHP файл трябва да следва следната стуктура:
- започва с <?php
- File-level docblock
- One or more declare statements като например declare(strict_types=1);
- Неймспесът на файла
- use стейтмънти в следният ред – class-based
use
, function-baseduse
, constant-baseduse
, разделени с празен ред за прегледност - самият код на файла
- <?php тагът трябва да е на свой отделен ред само когато е първият такъв за файла, но не и ако например имаме вграден HTML код в PHP кода
- import/require трябва да съдържат винаги само fully qualified пътища
- Compound namespaces трябва да имат дълбочина, максимално 2
- Като инстанцираме клас, на същият ред не трябва да имаме коментари. Т.е. след new Foo(); // не може!
- The
extends
andimplements
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
andfinal
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 theuse
keyword. - и т.н…
Литература: