Skip to content

Latest commit

 

History

History
664 lines (544 loc) · 16.5 KB

PHP.md

File metadata and controls

664 lines (544 loc) · 16.5 KB

Правила оформления PHP-кода

  1. Отступы

  2. Правила именования

    2.1. Ключевые слова и константы true/false/null

    2.2. Ключевые слова типов

    2.3. Классы

    2.4. Свойства класса

    2.5. Константы класса

  3. Определение пространств имён и блоков импорта

  4. Методы и аргументы

    4.1. Пробел после имени метода

    4.2. Открывающая скобка

    4.3. Закрывающая скобка

    4.4. Пробелы в определении метода

    4.5. Пробелы в списке аргументов

    4.6. Аргументы на нескольких строках

  5. Вызовы методов и функций

    5.1. Пробелы

    5.2. Запятые

    5.3. Аргументы

  6. Конструкции switch и case

  7. Конструкции while и do while

  8. Конструкция for

  9. Конструкция foreach

  10. Конструкция try catch

1. Отступы

Отступы улучшают читабельность кода. Для их оформления используйте четыре пробела, но не знак табуляции.

Хорошо

<?php
    switch ($expr) {
        case 1:
            echo 'Uno';
            break;
        case 2:
            echo 'Dos';
            break;
        case 3:
            echo 'Tres';
            break;
        default:
            echo 'Hola';
            break;
    }
?>

Плохо

<?php
  switch ($expr) {
      case 1:
       echo 'Uno';
      break;
    case 2:
      echo 'Dos';
     break;
              case 3:
              echo 'Tres';
                  break;
     default:
         echo 'Hola';
      break;
}
?>

2. Правила именования

2.1. Ключевые слова и константы true/false/null

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

Хорошо

<?php
    $equal = null;
    if ($a > $b) {
        echo "a больше, чем b";
        $equal = false;
    } elseif ($a == $b) {
        echo "a равен b";
        $equal = true;
    } else {
        echo "a меньше, чем b";
        $equal = false;
    }
?>

Плохо

<?PHP
	$equal = NULL;
	If ($a > $b) {
	    ECHO "a больше, чем b";
	    $equal = False;
	} ELSEif ($a == $b) {
	    Echo "a равен b";
	    $equal = TRUE;
	} ELSE {
	    eCHO "a меньше, чем b";
	    $equal = falSE;
	}
?>

2.2. Ключевые слова типов

Для ключевых слов типов должна использоваться укороченная запись вместо длинной.

Хорошо

function getBoolean(): bool
{
    // ...
}

function getInteger(): int
{
    // ...
}

Плохо

function getBoolean(): boolean
{
    // ...
}

function getInteger(): integer
{
    // ...
}

2.3. Классы

Имена классов должны быть объявлены в PascalCase (первая буква каждого слова - большая).

Хорошо

class FooBar
{
    // ...
}

Плохо

class fooBar
{
    // ...
}

class foo_bar
{
    // ...
}

2.4. Свойства и методы классов

Свойства и методы класса должны быть объявлены с использованием camelCase.

Хорошо

class Foo
{
    public string $bar;
    public string $someWords;
    
    public function get(): void
    {
        // ...
    }
    
    public function getSomething(): void
    {
        // ..
    }
}

Плохо

class Foo
{
    public $Bar;
    public $some_words;
    
    public function Get(): void
    {
        // ...
    }
    
    public function get_something(): void
    {
        // ...
    }
}

2.5. Константы классов

Константы класса должны быть объявлены в верхнем регистре.

Хорошо

class Foo
{
    const VERSION = '1.0';
    const DATE_APPROVED = '2012-06-01';
}

Плохо

class Foo
{
    const version = '1.0';
    const Date_Approved = '2012-06-01';
}

3. Определение пространств имён и блоков импорта

  • оставляйте одну пустую строку после определения пространства имён,
  • импорт пространств имён располагайте после определения пространства имён,
  • для каждого импорта пространства имён используйте отдельную строку со своим use,
  • после блока импорта оставляйте одну пустую строку.

Хорошо

<?php

    namespace Vendor\Package;

    use FooClass;
    use BarClass as Bar;
    use OtherVendor\OtherPackage\BazClass;

    // ... далее следует PHP-код ...
?>

Плохо

<?php

    namespace Vendor\Package;
    use FooClass, BarClass as Bar;
    use OtherVendor\OtherPackage\BazClass;
    // ... далее следует PHP-код ...
?>

4. Методы и аргументы

4.1. Пробел после имени метода

После имени метода не должно быть пробела.

Хорошо

<?php

    // PHP-код
    public function fooBarBaz($arg1)
    // PHP-код
?>

Плохо

<?php

    // PHP-код
    public function fooBarBaz ($arg1)
    // PHP-код
?>

4.2. Открывающая скобка

Открывающую фигурную скобку ставьте на отдельной строке.

Хорошо

<?php

    // PHP-код
    public function fooBarBaz($arg1)
    {
    // PHP-код
?>

Плохо

<?php

    // PHP-код
    public function fooBarBaz ($arg1) {
    // PHP-код
?>

4.3. Закрывающая скобка

Закрывающую фигурную скобку ставьте на следующей за телом метода строке.

Хорошо

<?php

    // PHP-код
    public function fooBarBaz($arg1)
    {
      echo 'Adiós';
    }
    // PHP-код
?>

Плохо

<?php

    // PHP-код
    public function fooBarBaz ($arg1)
    {
      echo 'Adiós'; }
    // PHP-код
?>

4.4. Пробелы в определении метода

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

Хорошо

<?php

    // PHP-код
    public function fooBarBaz($arg1)
    // PHP-код
?>

Плохо

<?php

    // PHP-код
    public function fooBarBaz( $arg1 )
    // PHP-код
?>

4.5. Пробелы в списке аргументов

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

Хорошо

<?php

    // PHP-код
    public function fooBarBaz($arg1, $arg2, $arg3)
    // PHP-код
?>

Плохо

<?php

    // PHP-код
    public function fooBarBaz ($arg1 ,  $arg2 ,  $arg3)
    // PHP-код
?>

4.6. Аргументы на нескольких строках

Список аргументов можно разделять на несколько строк, каждая из которых дополнена слева одним отступом, то есть четырьмя пробелами. В таком случае первый элемент списка аргументов нужно располагать с новой строки, и в каждой строке указывать только один аргумент. При этом закрывающая круглая скобка и открывающая фигурная скобка должны располагаться вместе на своей отдельной строке, а между ними должен быть один пробел.

Хорошо

<?php

    // PHP-код
    public function aVeryLongMethodName(
        $arg1,
        $arg2,
        $arg3
    ) {
        // тело метода
    }
    // PHP-код
?>

Плохо

<?php

    // PHP-код
    public function aVeryLongMethodName(
      $arg1,
      $arg2,
      $arg3)
    {
        // тело метода
    }
    // PHP-код
?>

5. Вызовы методов и функций

5.1. Пробелы

В коде вызова функций и методов не ставьте пробел:

  • между именем функции или метода и открывающей круглой скобкой,
  • после открывающей круглой скобки,
  • перед закрывающей круглой скобкой.

Хорошо

<?php

    bar();
    $foo->bar($arg1);
    Foo::bar($arg2, $arg3);
?>

Плохо

<?php

    bar ();
    $foo->bar 	( $arg1 );
    Foo::bar  (  $arg2, $arg3);
?>

5.2. Запятые

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

Хорошо

<?php

    Foo::bar($arg1, $arg2, $arg3);

?>

Плохо

<?php

    Foo::bar($arg1  ,$arg2,$arg3);

?>

5.3. Аргументы

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

Хорошо

<?php

    $foo->bar(
        $longArgument,
        $longerArgument,
        $muchLongerArgument
    );

?>

Плохо

<?php

    $foo->bar(
      $longArgument,
      $longerArgument,
      $muchLongerArgument);

?>

6. Конструкции switch и case

Конструкция switch должна выглядеть следующим образом. Выражение case смещено на один отступ, то есть четыре пробела от switch, а ключевое слово break или иное слово, обозначающее выход из конструкции, располагается на том же уровне отступов, что и тело case. Если в непустом теле case умышленно не используется break, допишите комментарий в стиле // no break.

Хорошо

<?php
    switch ($expr) {
        case 0:
            echo 'First case, with a break';
            break;
        case 1:
            echo 'Second case, which falls through';
            // no break
        case 2:
        case 3:
        case 4:
            echo 'Third case, return instead of break';
            return;
        default:
            echo 'Default case';
            break;
    }
?>

Плохо

<?php
    switch ($expr) {
    case 0:
      echo 'First case, with a break';
      break;
    case 1:
      echo 'Second case, which falls through';
    case 2:
    case 3:
    case 4:
      echo 'Third case, return instead of break';
      return;
    default:
      echo 'Default case';
      break;
    }
?>

7. Конструкции while и do while

Конструкцию while следует оформлять следующим образом. Между while и ( ставится пробел. После ( и до ) пробелов не должно быть. ) и { разделяются пробелом. Тело конструкции отделяется одним отступом, то есть четырьмя пробелами. } пишется на новой строке после тела конструкции.

Хорошо

<?php
    while ($expr) {
        // тело конструкции
    }
?>

Плохо

<?php
    while($expr){
    // тело конструкции
    }
?>

Конструкция do while должна выглядеть так:

Хорошо

<?php
    do {
        // тело конструкции
    } while ($expr);
?>

Плохо

<?php
    do{
    // тело конструкции
    }while($expr);
?>

8. Конструкция for

Пример оформления конструкции for представлен ниже. Между for и ( ставится пробел. После ; ставится пробел. ) и { разделяются пробелом. Тело конструкции отделяется одним отступом, то есть четырьмя пробелами. } пишется на новой строке после тела конструкции.

Хорошо

<?php
    for ($i = 0; $i < 10; $i++) {
        // тело for
    }
?>

Плохо

<?php
    for($i=0; $i<10; $i++) {
      // тело for
    }
?>

9. Конструкция foreach

Конструкция foreach должна выглядеть следующим образом. Между foreach и ( ставится пробел. Перед и после => ставится пробел. ) и { разделяются пробелом. Тело конструкции отделяется одним отступом, то есть четырьмя пробелами. } пишется на новой строке после тела конструкции.

Хорошо

<?php
    foreach ($iterable as $key => $value) {
        // тело foreach
    }
?>

Плохо

<?php
    foreach($iterable as $key=>$value){
    // тело foreach
    }
?>

10. Конструкция try catch

Оформляйте конструкцию try catch следующим образом. Между try и { ставится пробел. } и следующий за ним catch находятся на одной строке. Между catch и ( ставится пробел. ) и { разделяются пробелом. Тело try и тело catch отделяется одним отступом, то есть четырьмя пробелами. } пишется на новой строке после тела конструкции.

Хорошо

<?php
    try {
        // тело try
    } catch (FirstExceptionType $e) {
        // тело catch
    } catch (OtherExceptionType $e) {
        // тело catch
    }
?>

Плохо

<?php
    try{
      // тело try
    } catch (FirstExceptionType $e){
      // тело catch
    } catch (OtherExceptionType $e){
      // тело catch
    }
?>