Статья
Стандарты оформления кода PSR-1 и PSR-2

Стандарты оформления кода PSR-1 и PSR-2

14 сентября 2017

Что такое PSR?

PSR расшифровывается как PHP Standards Recommendations (стандартные рекомендации PHP).

The Framework Interoperability Group (FIG)

В FIG входят представители следующих программных продуктов: CakePHP, Composer, concrete5, Contao Open Source CMS, Drupal, eZ Publish, Horde, IBM i Toolkit, Icicle, Jackalope, Joomla, Lithium, Magento, PEAR, Phalcon, Phing, phpBB, phpDocumentor, PHPixie, Pimcore, PPI Framework, PrestaShop, PyroCMS, ReactPHP, Revive, Sculpin, SilverStripe, Slim, Stash, Stormpath PHP SDK, SugarCRM, Symfony, Neos and Flow, Wikibase and Semantic MediaWiki, Yii framework, Zend Framework 2, Zikula.

PSR-1 (базовый стандарт оформления кода)

1. В файлах допускаются только тэги <?php ?> и <?= ?>.

<?php

function foo()
{

}

?>

<?= $bar ?>


2. Допустимая кодировка файла - только UTF-8 без BOM.

3. В одном файле следует или объявлять классы, функции или выполнять побочные действия (генерация вывода). Совмещение недопустимо.

4. Пространства имен и классы должны соответствовать стандарту автозагрузки PSR-4.

5. Названия классов необходимо указывать в стиле StudlyCaps.

class MyFirstClass
{

}


6. Названия констант необходимо указывать в верхнем регистре с символом подчеркивани в качестве разделителя.

class MySecondClass
{
    
    const MY_CONSTANT = true;

}


7. Названия методов необходимо указывать в стиле camelCase.

class MyThirdClass
{

    public function getCount()
    {

    }

}

 


PSR-2 (рекомендации по оформлению кода)

1. Необходимо следовать правилам стандарта PSR-1.

2. В PHP файлах необходимо использовать окончания строк LF (\n).

2. PHP файлы необходимо заканчивть одной пустой строкой.

3. Если в PHP файле только PHP код, то необходимо удалять закрывающий тэг ?>

4. Нельзя оставлять пробелы в конце строки.

5. Длина строки жестко не ограничена, мягкое ограничение 120 символов, но желательно не превышать 80 символов.

6. Нельзя писать на одной строке более одной инструкции.

7. В качестве отступа необходимо использовать только 4 пробела.

8. Ключевые слова PHP и true, false, null необходимо писать в нижнем регистре.

9. При наличии пространства имён, после его объявления необходимо оставить одну пустую строку.

namespace app\frontend;

class MyClass
{

}


10. При наличии операторов use, необходимо располагать их после объявления пространства имён.

namespace app\frontend;

use app\backend\Functions;

class MyClass
{

}


11. Необходимо использовать один оператор use на одно объявление (импорт или создание псевдонима).

namespace app\frontend;

use app\backend\Functions;
use app\backend\Mail;
use app\backend\I18N;

class MyClass
{

}


12. Необходимо оставлять одну пустую строку после блока операторов use.

13. Ключевые слова extends и implements необходимо располагать на одной строке с именем класса.

14. Открывающая скобка класса или метода должна располагаться на следующей строке после объявления класса или метода.

15. Закрывающая скобка класса или метода должна располагаться на следующей строке после кода класса или метода.

class MyClass extends BasicClass implements Countable
{

}


16. Видимость необходимо объявлять для всех свойств и методов класса.

17. Пробел между названием метода и открывающей скобкой недопустим.

class MyClass
{

    public $foo;

    public function baz()
    {

    }

}


18. В списке аргументов методов недопустимы пробелы перед запятыми и необходим пробел после каждой запятой.

class MyClass
{

    public function foo($arg1, $arg2, $arg3)
    {

    }

}


19. Список аргументов определения метода можно разбить на несколько строк таким образом:

class MyClass
{

    public function foo(
        $arg1,
        $arg2,
        $arg3
    ) {

    }

}


20. Ключевое слово static должно следовать после указания видимости.

class MyClass
{

    protected static $foo;

}


21. Ключевые слова abstract или final должны следовать перед указанием видимости.

class MyClass
{

    abstract protected function foo();

    final public function bar()
    {

    }

}


22. При вызове метода или функции необходим пробел после каждой запятой, остальные пробелы недопустимы.

$foo->bar($arg1);
MyClass::bar($arg1, $arg2);


23. Список аргументов вызова метода можно разбить на несколько строк таким образом:

MyClass::bar(
    $arg1,
    $arg2
);


24. Управляющие структуры if, elseif, else.

if ($condition1) {
    // code
} elseif ($condition2) {
    // code
} else {
    // code
}


25. Управляющая структура switch.

switch ($condition) {
    case 0:
        // code
        break;
    case 1:
        // code
        break;
    default:
        // code
        break;
}


26. Управляющие структуры while, do while.

while ($condition) {
    // code
}

do {
    // code
} while ($condition);


27. Управляющая структура for.

for ($i = 0; $i < 10; $i++) {
    // code
}


28. Управляющая структура foreach.

foreach ($arr as $key => $value) {
    // code
}


29. Блоки try-catch.

try {
    // code
} catch (NotFoundException $e) {
    // code
} catch (BadRequestException $e) {
    // code
}


30. Замыкания

$firstClosure = function ($arg1, $arg2) {
    // code
};

$secondClosure = function ($arg1, $arg2) use ($var1, $var2) {
    // code
};

$text = preg_replace_callback(
    '|(\d{2}/\d{2}/)|',
    function ($matches) {
        return $matches[1];
    },
    $text
);

 


Источники:

http://www.php-fig.org
https://github.com/samdark/fig-standards-ru
https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-1-basic-coding-standard.md
https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md