PHP coding style
Table of Contents
Описал часть своего code style для PHP. To be updated.
Именование
Константы
Заглавными буквами с разделением между словами — подчёркиваниями.
1 2 3 |
define( 'MY_COOL_CONST', 1 ); // внутри класса const MY_OTHER_COOL_CONST = 2; |
Функции
lowerCamelCase
1 2 |
function justMyFunction() {} |
Классы
UpperCamelCase
1 2 |
class TheCoolestClassEver() { } |
Методы классов
lowerCamelCase
1 2 3 4 5 6 |
class TheCoolestClassEver() { public function sosoMethod() {} } |
Свойства классов
lowerCamelCase*
1 2 3 4 5 |
class TheCoolestClassEver() { public $someProp = null; } |
*UpperCamelCase в случае названия поля модели
Переменные
UpperCamelCase — для параметров функции
lowerCamelCase — в остальных случаях
1 2 3 4 |
function justMyFunction( $MyParam ) { $myVar = $MyParam + 1; } |
Отступы
В начале строки
Использовать табы (\t) шириной в три пробела.
Класс и «глобальная» функция не сдвигаются вправо от начала строки.
Вложенный код сдвигается на один таб на уровень.
В коде
При объявлении и вызове функций и методов (в том числе и встроенных) открывающая скобка не отделяется от названия функции.
У управляющих операторов (if, for, foreach, while и т.д.) открывающая скобка отделяется от оператора одним пробелом.
Аргументы всегда отделяются пробелом от внешних скобок.
В списке аргументов после запятой ставится пробел.
Если список аргументов надо перенести на следующую строку, то следующая строка сдвигается на один таб вправо, при этом закрывающая скобка переносится на отдельную строку без сдвига.
Примеры:
1 2 3 4 5 6 7 8 |
myMethod(); myMethod( $Arg1, $Arg2 ); myMethod( $Arg1, $Arg2, $Arg3, $Arg4, $Arg5 ); array( 1, 2 ); while ( $v ) if ( ! $v ) |
Унарные, бинарные, тернарный операторы отделяются от аргументов пробелами.
Комментарии
Комментарии (однострочные или многострочные) сдвигаются относительно комментируемого кода на один таб влево.
Примеры
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
<?php /** * Оповещение сотрудников о внештатной ситуации * * @since 30.06.11 * @author bullgare */ class HelperAlert { /** @var string этот параметр в "special_name" отличает alert от других данных в таблице */ private static $Name = 'alert'; // типы оповещений const TYPE_QUEUE_ERROR_MAIL_PUSH = 1; const TYPE_QUEUE_ERROR_MAIL_GET = 2; const TYPE_MAIL_SENDER_DOWN = 3; const TYPE_CRITICAL_EXCEPTIONS = 4; //------------------------------------------------------------------------------ /** * Устанавливает флаг * @since 30.06.11 * @author bullgare * @param int $Type тип оповещения * @param string $Comment комментарий (если пусто, то адрес сервера, где упало) */ public static function set( $Type, $Comment = '' ) { if ( ! self::checkType( $Type ) ) { //... } } } /*============================================================================* * END OF HelperAlert *=========================================================================}}}*/ |
1 |
http://pear.php.net/manual/ru/standards.naming.php
https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-1-basic-coding-standard.md
UPD 2020
Актуальный стиль можно найти здесь — https://www.php-fig.org/psr/psr-2/.
Можно использовать php cs fixer — https://github.com/FriendsOfPHP/PHP-CS-Fixer
Пример конфигурации:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
return PhpCsFixer\Config::create() ->setUsingCache(false) ->setRules([ '@Symfony' => true, 'array_syntax' => ['syntax' => 'short'], 'class_definition' => true, 'concat_space' => ['spacing' => 'one'], 'no_multiline_whitespace_around_double_arrow' => false, 'no_unneeded_control_parentheses' => false, 'ordered_imports' => true, 'phpdoc_order' => true, ]) ->setFinder( PhpCsFixer\Finder::create() ->in(__DIR__) ->exclude([ 'library/Doctrine', 'library/Dompdf', 'library/geoPHP', 'library/Google', 'library/PHPExcel', 'library/Rocket/Util', 'library/vendor', 'library/Zend', 'views/scripts', ]) ->notPath('library/Doctrine.php') ->notPath('library/Encode-explorer.php') ->notPath('library/Plivo/plivo.php') ); |
Similar Posts
LEAVE A COMMENT
Для отправки комментария вам необходимо авторизоваться.