-
2.1. Ключевые слова и константы
true
/false
/null
2.2. Ключевые слова типов
2.3. Классы
2.4. Свойства класса
2.5. Константы класса
-
4.1. Пробел после имени метода
4.2. Открывающая скобка
4.3. Закрывающая скобка
4.4. Пробелы в определении метода
-
5.1. Пробелы
5.2. Запятые
5.3. Аргументы
Отступы улучшают читабельность кода. Для их оформления используйте четыре пробела, но не знак табуляции.
Хорошо
<?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;
}
?>
Ключевые слова 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;
}
?>
Для ключевых слов типов должна использоваться укороченная запись вместо длинной.
Хорошо
function getBoolean(): bool
{
// ...
}
function getInteger(): int
{
// ...
}
Плохо
function getBoolean(): boolean
{
// ...
}
function getInteger(): integer
{
// ...
}
Имена классов должны быть объявлены в PascalCase
(первая буква каждого слова - большая).
Хорошо
class FooBar
{
// ...
}
Плохо
class fooBar
{
// ...
}
class foo_bar
{
// ...
}
Свойства и методы класса должны быть объявлены с использованием 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
{
// ...
}
}
Константы класса должны быть объявлены в верхнем регистре.
Хорошо
class Foo
{
const VERSION = '1.0';
const DATE_APPROVED = '2012-06-01';
}
Плохо
class Foo
{
const version = '1.0';
const Date_Approved = '2012-06-01';
}
- оставляйте одну пустую строку после определения пространства имён,
- импорт пространств имён располагайте после определения пространства имён,
- для каждого импорта пространства имён используйте отдельную строку со своим 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-код ...
?>
После имени метода не должно быть пробела.
Хорошо
<?php
// PHP-код
public function fooBarBaz($arg1)
// PHP-код
?>
Плохо
<?php
// PHP-код
public function fooBarBaz ($arg1)
// PHP-код
?>
Открывающую фигурную скобку ставьте на отдельной строке.
Хорошо
<?php
// PHP-код
public function fooBarBaz($arg1)
{
// PHP-код
?>
Плохо
<?php
// PHP-код
public function fooBarBaz ($arg1) {
// PHP-код
?>
Закрывающую фигурную скобку ставьте на следующей за телом метода строке.
Хорошо
<?php
// PHP-код
public function fooBarBaz($arg1)
{
echo 'Adiós';
}
// PHP-код
?>
Плохо
<?php
// PHP-код
public function fooBarBaz ($arg1)
{
echo 'Adiós'; }
// PHP-код
?>
Не должно быть пробелов после открывающей и перед закрывающей круглыми скобками в определении метода.
Хорошо
<?php
// PHP-код
public function fooBarBaz($arg1)
// PHP-код
?>
Плохо
<?php
// PHP-код
public function fooBarBaz( $arg1 )
// PHP-код
?>
В списке аргументов перед запятыми не должно быть пробелов, после каждой запятой — один пробел.
Хорошо
<?php
// PHP-код
public function fooBarBaz($arg1, $arg2, $arg3)
// PHP-код
?>
Плохо
<?php
// PHP-код
public function fooBarBaz ($arg1 , $arg2 , $arg3)
// PHP-код
?>
Список аргументов можно разделять на несколько строк, каждая из которых дополнена слева одним отступом, то есть четырьмя пробелами. В таком случае первый элемент списка аргументов нужно располагать с новой строки, и в каждой строке указывать только один аргумент. При этом закрывающая круглая скобка и открывающая фигурная скобка должны располагаться вместе на своей отдельной строке, а между ними должен быть один пробел.
Хорошо
<?php
// PHP-код
public function aVeryLongMethodName(
$arg1,
$arg2,
$arg3
) {
// тело метода
}
// PHP-код
?>
Плохо
<?php
// PHP-код
public function aVeryLongMethodName(
$arg1,
$arg2,
$arg3)
{
// тело метода
}
// PHP-код
?>
В коде вызова функций и методов не ставьте пробел:
- между именем функции или метода и открывающей круглой скобкой,
- после открывающей круглой скобки,
- перед закрывающей круглой скобкой.
Хорошо
<?php
bar();
$foo->bar($arg1);
Foo::bar($arg2, $arg3);
?>
Плохо
<?php
bar ();
$foo->bar ( $arg1 );
Foo::bar ( $arg2, $arg3);
?>
В списке аргументов перед запятыми не должно быть пробелов, после каждой запятой – один пробел.
Хорошо
<?php
Foo::bar($arg1, $arg2, $arg3);
?>
Плохо
<?php
Foo::bar($arg1 ,$arg2,$arg3);
?>
Список аргументов можно разделять на несколько строк, каждая из которых дополняется слева одним отступом, то есть четырьмя пробелами. В таком случае первый элемент списка аргументов должен начинаться с новой строки, и в каждой строке должен быть указан только один аргумент.
Хорошо
<?php
$foo->bar(
$longArgument,
$longerArgument,
$muchLongerArgument
);
?>
Плохо
<?php
$foo->bar(
$longArgument,
$longerArgument,
$muchLongerArgument);
?>
Конструкция 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;
}
?>
Конструкцию while
следует оформлять следующим образом. Между while
и (
ставится пробел. После (
и до )
пробелов не должно быть. )
и {
разделяются пробелом. Тело конструкции отделяется одним отступом, то есть четырьмя пробелами. }
пишется на новой строке после тела конструкции.
Хорошо
<?php
while ($expr) {
// тело конструкции
}
?>
Плохо
<?php
while($expr){
// тело конструкции
}
?>
Конструкция do while
должна выглядеть так:
Хорошо
<?php
do {
// тело конструкции
} while ($expr);
?>
Плохо
<?php
do{
// тело конструкции
}while($expr);
?>
Пример оформления конструкции for
представлен ниже. Между for
и (
ставится пробел. После ;
ставится пробел. )
и {
разделяются пробелом. Тело конструкции отделяется одним отступом, то есть четырьмя пробелами. }
пишется на новой строке после тела конструкции.
Хорошо
<?php
for ($i = 0; $i < 10; $i++) {
// тело for
}
?>
Плохо
<?php
for($i=0; $i<10; $i++) {
// тело for
}
?>
Конструкция foreach
должна выглядеть следующим образом. Между foreach
и (
ставится пробел. Перед и после =>
ставится пробел. )
и {
разделяются пробелом. Тело конструкции отделяется одним отступом, то есть четырьмя пробелами. }
пишется на новой строке после тела конструкции.
Хорошо
<?php
foreach ($iterable as $key => $value) {
// тело foreach
}
?>
Плохо
<?php
foreach($iterable as $key=>$value){
// тело foreach
}
?>
Оформляйте конструкцию 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
}
?>