Качество программы начинается с качества ее исходного кода. Основным фактором качества исходного кода программы является его читаемость и понятность. Необходимо формализовать правила написания кода, которые сделают чужой код читабельнее и понятнее. Правила форматирования кода должны быть едиными во всем проекте. И крайне желательно, чтобы они были очень похожими между проектами.
1. Форматирование кода
1.1. Структурирование текста
1.1.1. Длина строки
Нужно стараться избегать строк длиной более 120 символов. Если строка превышает этот размер, то нужно использовать правила переноса строки.
1.1.2. Правила переноса строки
Если длина строки превышает 120 символов, то необходимо пользоваться следующими правилами переноса:
- переносить можно после запятой или перед оператором;
- переносимая строка должна быть сдвинута относительно верхней на один символ табуляции;
- переносы должны быть в стиле UNIX.
$arAuthResult = $USER->ChangePassword($USER_LOGIN, $USER_CHECKWORD, $USER_PASSWORD, $USER_CONFIRM_PASSWORD, $USER_LID);
допустимым будет следующий вариант переноса:
Учим PHP за 1 Час! #От Профессионала
$arAuthResult = $USER->ChangePassword($USER_LOGIN, $USER_CHECKWORD, $USER_PASSWORD, $USER_CONFIRM_PASSWORD, $USER_LID);
if(COption::GetOptionString(«main», «new_user_registration», «N»)==»Y» $_SERVER[‘REQUEST_METHOD’]==’POST’
$TYPE==»REGISTRATION» (!defined(«ADMIN_SECTION») || ADMIN_SECTION!==true))
допустимым будет следующий вариант переноса:
if (COption::GetOptionString(«main», «new_user_registration», «N») == «Y» $_SERVER[‘REQUEST_METHOD’] == ‘POST’ $TYPE == «REGISTRATION» (!defined(«ADMIN_SECTION») || ADMIN_SECTION !== true))
1.1.3. Пробелы и табуляция
Для форматирования отступов в коде нужно использовать табуляцию. Использование пробелов запрещено. Причины:
- в случае использования табуляции каждый может настроить в своем редакторе желаемый отступ;
- используется один символ вместо нескольких;
- разрушая форматирование.
1.1.4. Форматирование подчиненности
Подчиненный код должен быть сдвинут от главного ровно на один символ табуляции. Подчиненный код не может находиться на той же строке, что и главный.
не правильно писать так:
if ($a == 0)
правильно писать так:
if ($a == 0)
1.2. Инструкции, выражения
1.2.1. Выражения
Желательно, чтобы в каждой строчке присутствовало только одно выражение.
не правильно писать так:
$a = $b; $b = $c; $c = $a;
правильно писать так:
$a = $b; $b = $c; $c = $a;
1.2.2. Инструкции if, else, while и т.п.
Допустимы два вида написания инструкций:
-
если тела всех частей инструкции состоят не более чем из одного выражения, то инструкция может записываться в виде
Правила написания простого.и понятного кода на PHP — Clean Code
if (условие) действие1; else действие2;
if (условие) < действие1; >else
При написании инструкций должно строго применяться правило «1.1.4 Форматирование подчиненности»: тело инструкции должно быть сдвинуто на один символ табуляции вправо от самой инструкции. Фигурные скобки должны находиться на отдельных строках и должны быть на одном уровне с инструкцией.
не правильно писать так:
if ($a == 0) $a = 10; else
правильно писать так:
if ($a == 0) < $a = 10; >else
1.2.3. Сложные инструкции
Сложные инструкции следует разбивать по строкам в соответствии с правилами пункта 1.2.2.
if(COption::GetOptionString(«main», «new_user_registration», «N»)==»Y» $_SERVER[‘REQUEST_METHOD’]==’POST’ $TYPE==»REGISTRATION» (!defined(«ADMIN_SECTION») || ADMIN_SECTION!==true))
можно записать как
if (COption::GetOptionString(«main», «new_user_registration», «N») == «Y» $_SERVER[‘REQUEST_METHOD’] == ‘POST’ $TYPE == «REGISTRATION» (!defined(«ADMIN_SECTION») || ADMIN_SECTION !== true))
Очень сложные инструкции рекомендуется разбивать на несколько более простых.
if((!(defined(«STATISTIC_ONLY») STATISTIC_ONLY substr($APPLICATION->GetCurPage(), 0, strlen(BX_ROOT.»/admin/»))!=BX_ROOT.»/admin/»)) COption::GetOptionString(«main», «include_charset», «Y»)==»Y» strlen(LANG_CHARSET)>0)
можно записать так:
$publicStatisticOnly = False; if (defined(«STATISTIC_ONLY») STATISTIC_ONLY substr($APPLICATION->GetCurPage(), 0, strlen(BX_ROOT.»/admin/»)) != BX_ROOT.»/admin/») < $publicStatisticOnly = True; >if (!$publicStatisticOnly strlen(LANG_CHARSET) > 0 COption::GetOptionString(«main», «include_charset», «Y») == «Y») < >
if (!defined(«STATISTIC_ONLY») || ! STATISTIC_ONLY || substr($APPLICATION->GetCurPage(), 0, strlen(BX_ROOT.»/admin/»)) == BX_ROOT.»/admin/») < if (strlen(LANG_CHARSET) >0 COption::GetOptionString(«main», «include_charset», «Y») == «Y») < >>
1.2.4. Форматирование массивов
Массивы, которые записываются в несколько строк, следует форматировать следующим образом:
$arFilter = array( «key1» => «value1», «key2» => array( «key21» => «value21», «key22» => «value22», ) );
1.3. Пустые строки и пробелы
1.3.1. Пустые строки
Пустые строки помогаю разбивать код приложения на логические сегменты. Несколькими строками могут отделяться секции в исходном файле.
Одной пустой строкой отделяются друг от друга методы, логические секции внутри метода для более удобного чтения. Перед логической секцией рекомендуется вставить комментарий, в котором будет указано назначение этой секции (см. пункт 3).
1.3.2. Пробелы
После запятой должен быть пробел. После точки с запятой, если она не последняя в строке (например в инструкцииfor), должен быть пробел. Перед запятой или точкой с запятой пробелы не ставятся. Все операторы должны быть отделены пробелом от операндов с обеих сторон. Замена пробела символом табуляции не допускается.
Один пробел используется в объявлении методов после запятой, но не перед скобками:
TestMethod($a, $b, $c);
Пример неправильного использования:
TestMethod($a,$b,$c);
TestMethod( $a, $b, $c );
Так же одиночный пробел может быть использован для выделения операторов:
$a = $b * $c / $d;
Пример неправильного использования:
$a=$b*$c/$d;
Также пробелы используются при форматировании циклов:
for ($i = 0; $i < 10; $i++)
Пример неправильного использования:
for($i=0;$i<10;$i++)
Табличное форматирование с помощью символов табуляции не должно использоваться.
Пример неправильного форматирования:
$arArray = array( «key1» => «value1», «key2» => «value2», );
Замечание: присутствие или отсутствие пробела после if правилами не регламентируется.
1.4. Прочее
В сложных выражениях рекомендуется группировать операции с помощью скобок вне зависимости от того, требует это приоритет операций или нет.
$r = $a + ($b * $c);
2. Соглашение об именовании
2.1. Общие понятия
Не используйте подчеркивание для отделения слов внутри идентификаторов, это удлиняет идентификаторы и затрудняет чтение.
Старайтесь давать переменным, методам и пр. «говорящие» названия. Предпочтительно использовать имена, которые ясно и четко описывают предназначение и/или смысл сущности.
Старайтесь делать имена идентификаторов как можно короче (но не в ущерб читабельности).
2.2. Именование переменных
Первое логическое слово должно начинаться с маленькой буквы, остальные логические слова — с большой (стиль Кэмел). Например: $testCounter, $userPassword.
2.3. Именование методов и функций
Каждое логическое слово должно начинаться с заглавной буквы (стиль Паскаль). Например: CountVariable,ChangeUserPassword.
2.4. Префиксы переменных
PHP — не особо типизированый язык и в нем различаются по смыслу только три группы типов: скалярные, массивы и объекты.
Массивы следует именовать с префиксом «ar», при этом следующее логическое слово в названии начинается с большой буквы. Например, $arResult, $arModifiedUsers.
Объекты следует именовать с префиксом «ob», при этом следующее логическое слово в названии начинается с большой буквы. Например, $obElement, $obUser.
Объект класса CDBResult следует начинать с префикса «db», при этом следующее логическое слово в названии начинается с большой буквы. Например, $dbResult.
Скалярные типы следует начинать с префиксов только в том случае, если точно известно, что они имеют заданный тип. Например в коде
$userID = $_REQUEST[«var»]; $userID = IntVal($userID);
переменная идет без префикса, так как ее тип меняется по ходу выполнения программы.
$bFlag = (($aaa > 0)? True : False);
переменная идет с префиксом, так как ее тип в общем известен и не меняется.
2.5. Именование классов
Имя класса должно начинаться с буквы «C». Если класс принадлежит модулю, то дальше должно идти «фирменное» название модуля. Каждое логическое слово должно начинаться с заглавной буквы.
Пример: CIBlockElement, CIBlockType, CSaleAffiliate.
Если класс различается для разных СУБД и соответственно имеет базовый класс с общими для всех СУБД методами, то этот базовый класс должен в своем имени после символа «C» содержать символы «All».
Пример: CAllSaleAffiliate.
2.6. Доступность членов-переменных и методов класса
Так как у нас нет других методов организации видимости и доступности членов-переменных и методов классов, то следует применять следующие правила:
- члены-переменные и методы, которые являются приватными и к которым не может обращаться никто, кроме самого модуля (т.е. ни публичная часть, ни другие модули), должны начинаться с двух символов подчеркивания. Например, __CheckEmail, __arData. Эти методы не описываются в документации и могут быть изменены без обеспечения совместимости;
- члены-переменные и методы, которые являются внутренними и к которым могут обращаться только модули продукта (т.е. публичная часть не может), должны начинаться с одного символа подчеркивания. Например,_CheckEmail, _arData. Эти методы не описываются в публичной документации (но хорошо бы описать во внутренней) и могут быть изменены без обеспечения совместимости только после уведомления всех сотрудников;
- остальные методы и члены-переменные считаются публичными, должны быть описаны в документации и не могут быть изменены без обеспечения совместимости.
2.7. Именование констант
Константы должны писаться большими буквами и иметь префикс «BX_». Например, BX_ROOT,BX_FILE_PERMISSIONS.
3. Комментарии
Для пояснения назначения класса или метода необходимо размещать комментарий перед объявлением этого класса или метода.
Необходимо избегать очевидных комментариев типа:
$i = $i + 1; // добавить к i единицу
Следует добавлять комментарий о назначении классов и методов к каждому публичному классу или методу.
Перед логическими секциями кода желательно добавлять комментарии о том, что данная секция будет делать.
Комментарии должны быть только на английском языке.
4. Идиомы программирования
4.1. Общее понятие
В любом языке программирования существуют так называемые идиомы, то есть повсеместно применяемые способы использования тех или иных конструкций. Например, в языке PHP к таким идеомам можно отнести форму записи цикла по элементам массива
for ($i = 0, $cnt = count($arArray); $i
foreach ($arArray as $key => $value)
Использование идиом позволяет читающему пропускать очевидные фрагменты кода и сосредоточиться на содержательных вещах, а также находить в коде нужные фрагменты по характерным (идиоматическим) конструкциям.
Необходимо стараться использовать общепринятые конструкции, а не изобретать свои собственные.
reset($arHashLink); while(list($hash, $arData)=each($arHashLink))
лучше переписывать в таком виде
foreach ($arHashLink as $hash => $arData)
4.2. Примеры идиом
$res = ($bTrue? «True» : «False»);
5. SQL запросы
Каждая операция SELECT, FROM, WHERE, ORDER BY, GROUP BY, HAVING должна начинаться с новой строки.
Правило переноса длинной строки такое же как в PHP, новая строка с табуляции.
Источник: tsipan.dev
Переменные
Имена переменных состоят только из строчных символов, слова разделяются символом «подчеркивание». Имя переменной должно отражать суть её содержимого. Недопустимо использовать сокращенные слова в именах переменных, например: prop вместо property.
В объявлениях переменных:
$orm_object,
$used_address,
В аргументах методов класса:
function example($check_data_before = true , $referer = null)
Именование пространств имен, классов, интерфейсов, методов
К пространствам имен (namespace), классам, интерфейсам применяются общие правила именования. Наименование должно начинается с заглавной буквы, каждое новое слово также должно начинаться с заглавной буквы. Исключение составляет основной namespace фреймворка ReadyScript. Он состоит из двух заглавных букв RS.
Источник: readyscript.ru
PSR-2. Руководство по оформлению кода
Это руководство продолжает и расширяет PSR-1, основной стандарт написания кода.
Целью данного руководства является снижение когнитивных трений при беглом осмотре кода от разных авторов. Оно делает это путем перечисления общих наборов правил и ожиданий о том, как оформлять PHP код.
Эти правила оформления являются производным от сходства между разными участвующими проектами. Когда разные авторы сотрудничают в нескольких проектах, это помогает иметь один набор нормативов для использования между всеми этими проектами. Таким образом польза этого руководства не в самих правилах, а в обмене этими правилами.
Ключевые слова «ДОЛЖЕН», «НЕ ДОЛЖЕН», «ТРЕБУЕТСЯ», «БУДЕТ», «НЕ БУДЕТ», «СЛЕДУЕТ», «НЕ СЛЕДУЕТ», «РЕКОМЕНДУЕТСЯ», «МОЖЕТ», и «ДОПОЛНИТЕЛЬНО» в этом документе должны быть истолкованы как описано в RFC 2119.
1. Обзор
- Код ДОЛЖЕН следовать PSR-1.
- Код ДОЛЖЕН использовать 4 пробела для отступов, не табуляцию.
- НЕ ДОЛЖНО быть жесткого ограничения на длину строки; мягкое ограничение ДОЛЖНО быть 120 знаков; строкам СЛЕДУЕТ быть 80 символов или менее.
- ДОЛЖНА быть одна пустая строка после объявления namespace , и ДОЛЖНА быть одна пустая строка после блока с объявлениями use .
- Открывающие фигурные скобки для классов ДОЛЖНЫ быть на новой строке, и закрывающие фигурные скобки ДОЛЖНЫ быть на новой строке после тела класса.
- Открывающие фигурные скобки для методов ДОЛЖНЫ быть на новой строке, и закрывающие фигурные скобки ДОЛЖНЫ быть на новой строке после тела метода.
- Область видимости ДОЛЖНА быть описана у всех свойств и методов; abstract и final ДОЛЖНЫ быть описаны перед областью видимости; static ДОЛЖНО быть описано после области видимости.
- Ключевые слова управляющих конструкций ДОЛЖНЫ иметь один пробел после себя; вызовы методов и функции НЕ ДОЛЖНЫ.
- Открывающие фигурные скобки для управляющих конструкций ДОЛЖНЫ быть на той же строке, а закрывающие фигурные скобки ДОЛЖНЫ быть на новой строке после тела конструкции.
- Открывающие круглые скобки для управляющих конструкций НЕ ДОЛЖНЫ иметь пробел после себя, а закрывающие круглые скобки для управляющих конструкций НЕ ДОЛЖНЫ иметь пробел перед собой.
1.1. Пример
Этот пример как краткий обзор включает в себя некоторые из ниже указанных правил:
elseif ($a > $b) < $foo->bar($arg1); > else < BazClass::bar($arg2, $arg3); >> final public static function bar() < // тело метода >>
2. Общее
2.1 Основной стандарт написания кода
Код ДОЛЖЕН следовать всем правилам изложенным в PSR-1.
2.2 Файлы
Все PHP файлы ДОЛЖНЫ использовать переводы строк Unix LF (linefeed).
Все PHP файлы ДОЛЖНЫ оканчиваться одной пустой строкой.
Закрывающий ?> тег ДОЛЖЕН быть исключен из файлов содержащих только PHP.
2.3. Строки
НЕ ДОЛЖНО быть жесткого ограничения на длину строки.
Мягкое ограничение на длину строки ДОЛЖНО быть 120 знаков; автоматические проверки стиля ДОЛЖНЫ предупредить но НЕ ДОЛЖНЫ выдавать ошибку на мягкие ограничения.
Строкам НЕ СЛЕДУЕТ быть длиннее 80 знаков; более длинные строки СЛЕДУЕТ разбивать на несколько последующих строк не более чем 80 знаков в каждой.
НЕ ДОЛЖНО быть замыкающий пробелов в конце строки на не пустых строках.
Пустые строки МОГУТ быть добавлены для улучшения читабельности и указания связанных блоков кода.
НЕ ДОЛЖНО быть более одного оператора в строке.
2.4. Отступы
Код ДОЛЖЕН использовать отступ в 4 пробела, и НЕ ДОЛЖЕН использовать табуляцию для отступов.
Обратите особое внимание: Использование только пробелов, и не смешивание пробелов и табуляции, помогает избежать проблем с диффами, патчами, историей, и аннотациями. Использование пробелов также позволяет легко вставить тонко-настроенный суб-отступ для межстрочного выравнивания.
2.5. Ключевые слова и True/False/Null
PHP Ключевые слова ДОЛЖНЫ быть в нижнем регистре.
PHP константы true , false , и null ДОЛЖНЫ быть в нижнем регистре.
3. Объявление Пространства имен и Use
Если они присутствуют, то ДОЛЖНА быть одна пустая строка после объявления namespace .
Если они присутствуют, все объявления use ДОЛЖНЫ идти после объявления namespace .
ДОЛЖНО быть ключевое слово use на каждое объявление.
ДОЛЖНА быть одна пустая строка после блока use .
4. Классы, Свойства, и Методы
Термин «класс» относится ко всем классам, интерфейсам и трейтам.
4.1. Extends и Implements
Ключевые слова extends и implements ДОЛЖНЫ быть объявлены на той же строке, что и имя класса.
Открывающая фигурная скобка для класса ДОЛЖНА идти на своей собственной строке; закрывающая фигурная скобка для класса ДОЛЖНА идти на следующей строке после тела класса.
Список implements МОЖЕТ быть разделен на несколько строк, где каждая последующая строка с одним отступом. При этом первый элемент в списке ДОЛЖЕН быть на следующей строке, и ДОЛЖЕН быть только один интерфейс на строку.
4.2. Свойства
Область видимости ДОЛЖНА быть объявлена на все свойства.
Ключевое слово var НЕ ДОЛЖНО быть использовано для объявления свойства.
НЕ ДОЛЖНО быть более одного свойства объявленного на оператор.
Имена свойств НЕ СЛЕДУЕТ делать с подчеркиванием в качестве приставки для обозначения области видимости protected или private.
Объявление свойства выглядит следующим образом.
4.3. Методы
Область видимости ДОЛЖНА быть объявлена на все методы.
Имена методов НЕ СЛЕДУЕТ делать с подчеркиванием в качестве приставки для обозначения области видимости protected или private.
Имена методов НЕ ДОЛЖНЫ быть объявлены с пробелом после имени метода. Открывающая фигурная скобка ДОЛЖНА идти на своей собственной строке, а закрывающая фигурная скобка ДОЛЖНА быть на следующей строке после тела метода. НЕ ДОЛЖНО быть пробела после открытия круглой скобки, и НЕ ДОЛЖНО быть пробела перед закрывающей круглой скобкой.
Объявление метода выглядит следующим образом. Обратите внимание на размещение круглых скобок, запятых, пробелов и фигурных скобок:
4.4. Аргументы Метода
В списке аргументов, НЕ ДОЛЖНО быть пробела перед каждой запятой, и ДОЛЖЕН быть один пробел после каждой запятой.
Аргументы Метода со значениями по умолчанию должны идти в конце списка аргументов.
Список аргументов МОЖЕТ быть разделен на несколько строк, где каждая последующая строка с одним отступом. При этом первый элемент в списке ДОЛЖЕН быть на следующей строке, и ДОЛЖЕН быть только один аргумент на строку.
Когда список аргументов разделен на несколько строк, закрывающая круглая скобка и открывающая фигурная скобка ДОЛЖНЫ быть установлены вместе на их собственную строку с одним пробелом между ними.
4.5. abstract , final , и static
Если они присутствуют, то abstract и final ДОЛЖНЫ предшествовать перед объявлением области видимости.
Если присутствует объявление static , то оно ДОЛЖНО идти после объявления области видимости.
4.6. Вызовы Метода и Функции
При выполнении вызова метода или функции, НЕ ДОЛЖНО быть пробела между именем метода или функции и открывающей круглой скобкой, НЕ ДОЛЖНО быть пробела после открытия круглой скобки, а также НЕ ДОЛЖНО быть пробела перед закрывающей круглой скобкой. В списке аргументов, НЕ ДОЛЖНО быть пробела перед каждой запятой, и ДОЛЖЕН быть один пробел после каждой запятой.
bar($arg1); Foo::bar($arg2, $arg3);
Списки аргументов МОГУТ быть разделены на несколько строк, где каждая последующая строка с одним отступом. При этом первый элемент в списке ДОЛЖЕН быть на следующей строке, и ДОЛЖЕН быть только один аргумент на строку.
bar( $longArgument, $longerArgument, $muchLongerArgument );
5. Управляющие конструкции
Общие правила стиля для управляющих конструкций следующие:
- ДОЛЖЕН быть один пробел после ключевого слова управляющей конструкции
- НЕ ДОЛЖНО быть пробела после открывающих круглых скобок
- НЕ ДОЛЖНО быть пробела перед закрывающими круглыми скобками
- ДОЛЖЕН быть один пробел между закрывающей круглой скобкой и открывающей фигурной скобкой
- Тело конструкции должно быть с одним отступом
- Закрывающая фигурная скобка ДОЛЖНА быть на следующей строке после тела управляющей конструкции
Тело каждой конструкции ДОЛЖНО быть заключено в фигурные скобки. Это стандартизирует вид конструкций, и уменьшает вероятность внесения ошибок при добавлении новых строк к телу управляющей конструкции.
5.1. if , elseif , else
Оператор if выглядит следующим образом. Обратите внимание на размещение круглых скобок, пробелов и фигурных скобок; и что else и elseif находятся на одной линии, как и закрывающая фигурная скобка тела оператора.
elseif ($expr2) < // тело оператора elseif >else < // тело оператора else; >
Ключевое слово elseif СЛЕДУЕТ использовать вместо else if так что все управляющие ключевые слова выглядят как единые слова.
5.2. switch , case
Конструкция switch выглядит следующим образом. Обратите внимание на размещение круглых скобок, пробелов и фигурных скобок. Оператор case ДОЛЖЕН быть с одним отступом от switch , а ключевое слово break (или другое завершающее ключевое слово) ДОЛЖНО быть с таким же отступом как тело оператора case . ДОЛЖЕН быть комментарий, такой как // no break когда есть преднамеренное падение в не-пустое тело оператора case .
5.3. while , do while
Оператор while выглядит следующим образом. Обратите внимание на размещение круглых скобок, пробелов и фигурных скобок.
Кроме того, оператор do while выглядит следующим образом. Обратите внимание на размещение круглых скобок, пробелов и фигурных скобок.
while ($expr);
5.4. for
Оператор for выглядит следующим образом. Обратите внимание на размещение круглых скобок, пробелов и фигурных скобок.
5.5. foreach
Оператор foreach выглядит следующим образом. Обратите внимание на размещение круглых скобок, пробелов и фигурных скобок.
$value) < // тело оператора foreach >
5.6. try , catch
Блок try catch выглядит следующим образом. Обратите внимание на размещение круглых скобок, пробелов и фигурных скобок.
catch (FirstExceptionType $e) < // тело оператора catch >catch (OtherExceptionType $e) < // тело оператора catch >
6. Замыкания
Замыкания ДОЛЖНЫ быть объявлены с пробелом после ключевого слова function , и пробелом перед и после ключевого слова use .
Открывающая фигурная скобка ДОЛЖНА идти на той же строке, а закрывающая фигурная скобка ДОЛЖНА идти на следующей строке после тела функции.
НЕ ДОЛЖНО быть пробела после открывающей круглой скобки списка аргументов или списка переменных, и НЕ ДОЛЖНО быть пробела перед закрывающей круглой скобкой списка аргументов или списка переменных.
В списке аргументов и списке переменных НЕ ДОЛЖНО быть пробела перед каждой запятой, и ДОЛЖЕН быть один пробел после каждой запятой.
Аргументы замыкания со значениями по умолчанию должны идти в конце списка аргументов.
Объявление замыкания выглядит следующим образом. Обратите внимание на размещение круглых скобок, запятых, пробелов и фигурных скобок:
; $closureWithArgsAndVars = function ($arg1, $arg2) use ($var1, $var2) < // тело функции >;
Список аргументов и список переменных МОЖЕТ быть разделен на несколько строк, где каждая последующая строка с одним отступом. При этом первый элемент в списке ДОЛЖЕН быть на следующей строке, и ДОЛЖЕН быть только один аргумент или переменная на строку.
Когда конечный список (или аргументов или переменных) разделен на несколько строк, закрывающая круглая скобка и открывающая фигурная скобка ДОЛЖНЫ быть установлены вместе на их собственную строку с одним пробелом между ними.
Ниже приведены примеры замыканий с и без списка аргументов и списка переменных разбитого на несколько строк.
; $noArgs_longVars = function () use ( $longVar1, $longerVar2, $muchLongerVar3 ) < // тело функции >; $longArgs_longVars = function ( $longArgument, $longerArgument, $muchLongerArgument ) use ( $longVar1, $longerVar2, $muchLongerVar3 ) < // тело функции >; $longArgs_shortVars = function ( $longArgument, $longerArgument, $muchLongerArgument ) use ($var1) < // тело функции >; $shortArgs_longVars = function ($arg) use ( $longVar1, $longerVar2, $muchLongerVar3 ) < // тело функции >;
Обратите внимание, что правила форматирования применяются также когда замыкание используется прямо как аргумент при вызове метода или функции.
bar( $arg1, function ($arg2) use ($var1) < // тело функции >, $arg3 );
7. Заключение
Есть много элементов оформления и практик умышленно опущенных в этом руководстве. Они включают, но не ограничиваются:
- Объявление глобальных переменных и глобальных констант
- Объявление функций
- Операторы и присваивания
- Вписанное выравнивание
- Комментарии и блоки документации
- Приставки и окончания имен классов
- Практический опыт
Будущее рекомендации МОГУТ пересмотреть и расширить это руководство для решения тех или иных элементов оформления и практик.
Источник: idealcms.ru