Maison  >  Article  >  développement back-end  >  Introduction détaillée à la spécification de style de codage PSR-2 de PHP (code)

Introduction détaillée à la spécification de style de codage PSR-2 de PHP (code)

不言
不言avant
2019-04-01 10:15:101824parcourir

Le contenu de cet article est une introduction détaillée (code) sur la spécification du style de codage PSR-2 de PHP. Il a une certaine valeur de référence. Les amis dans le besoin pourront s'y référer. .

Vient ensuite la spécification de style de codage PSR-2, qui est l'héritage et l'extension de la spécification de codage de base PSR-1.

PSR-1 et PSR-2 sont les normes de codage de base dans le développement PHP. En fait, tout le monde peut s'y référer et en tirer des leçons. Bien que chaque développeur ait son propre ensemble de normes de développement qu'il connaît, Je pense que c'est toujours Écrivez notre code selon les normes de l'industrie. Après tout, les normes ont été vérifiées. J'espère que cela sera utile aux développeurs PHP.

1. Présentation

Le code doit suivre les spécifications de codage dans [PSR-1]().

Le code doit être indenté de 4 espaces au lieu de la « touche Tab ».

Le nombre de caractères par ligne doit être doucement maintenu à moins de 80. En théorie, il ne doit pas dépasser 120, mais il ne doit pas y avoir de limite stricte.

Une ligne vide doit être insérée après chaque instruction de déclaration d'espace de noms et utiliser le bloc de déclaration.

L'accolade ouvrante ({) d'une classe doit être écrite sur sa propre ligne après la déclaration de la classe, et l'accolade fermante (}) doit également être écrite sur sa propre ligne après le corps de la classe.

L'accolade ouvrante ({) de la méthode doit être écrite sur sa propre ligne après la déclaration de la fonction, et l'accolade fermante (}) doit également être écrite sur sa propre ligne après le corps de la fonction.

Les attributs et méthodes de la classe doivent ajouter des modificateurs d'accès (privé, protégé et public), abstract et final doivent être déclarés avant le modificateur d'accès, et static doit être déclaré après le modificateur d'accès.

Il doit y avoir un espace après le mot-clé de la structure de contrôle, mais il ne doit pas y en avoir lors de l'appel d'une méthode ou d'une fonction.

L'accolade ouvrante ({) de la structure de contrôle doit être écrite sur la même ligne que la déclaration, et l'accolade fermante (}) doit être écrite sur sa propre ligne après le corps.

Il ne doit y avoir aucun espace après la parenthèse gauche d'ouverture et avant la parenthèse droite de fermeture de la structure de contrôle.

1.1. Exemple

L'exemple de programme suivant démontre simplement la plupart des spécifications ci-dessus :

<?php
namespace Vendor\Package;
use FooInterface;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;
class Foo extends Bar implements FooInterface
{
 public function sampleFunction($a, $b = null)
 {
 if ($a === $b) {
 bar();
 } elseif ($a > $b) {
 $foo->bar($arg1);
 } else {
 BazClass::bar($arg2, $arg3);
 }
 }
 final public static function bar()
 {
 // 方法的内容
 }
}

2. 🎜 >

2.1 Directives de codage de base

Le code doit être conforme à toutes les spécifications de [PSR-1]().

2.2 Fichiers

Tous les fichiers PHP doivent utiliser Unix LF (saut de ligne) comme terminateur de ligne.

Tous les fichiers PHP doivent se terminer par une ligne vide.

Les fichiers de code PHP pur doivent omettre la balise de fermeture finale ?>

2.3. La longueur de la ligne

ne doit pas avoir de contraintes fortes.

Les contraintes de longueur logicielles doivent être limitées à 120 caractères. Si cette longueur est dépassée, l'éditeur avec vérification de la spécification du code doit émettre un avertissement, mais ne doit pas émettre d'invite d'erreur.

Chaque ligne ne doit pas dépasser 80 caractères, et les lignes de plus de 80 caractères doivent être pliées en plusieurs lignes.

Il ne doit y avoir aucun espace supplémentaire après une ligne non vide.

Les lignes vides peuvent faciliter la lecture du code et aider à le décomposer.

Il ne doit pas y avoir plus d'une déclaration par ligne.

2.4. Indentation

Le code doit être indenté de 4 espaces, et la touche de tabulation ne doit pas être utilisée.

Remarque : L'avantage d'utiliser des espaces au lieu de "l'indentation de tabulation" est que

évite toute confusion lors de la comparaison des différences de code, des correctifs, de la révision du code et des commentaires.

Utilisez également des espaces pour l'indentation afin de faciliter l'alignement.

2.5. Mots-clés et Vrai/Faux/Null

Tous les mots-clés PHP doivent être tous en minuscules.

Les constantes true, false et null doivent également être toutes en minuscules.

3. Déclarations d'espace de noms et d'utilisation

Une ligne vide doit être insérée après la déclaration d'espace de noms.

Toutes les utilisations doivent être déclarées après l'espace de noms.

Chaque instruction use ne doit avoir qu’un seul mot-clé use.

Il doit y avoir une ligne vide après la déclaration du bloc d'instruction use.

Par exemple :

<?php

namespace Vendor\Package;
use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

4 Classes, propriétés et méthodes

La "classe" fait ici référence à toutes les "classes", " interface" et "blocs de code réutilisables".

4.1. Extension et héritage

Les mots-clés extends et Implements doivent être écrits sur la même ligne du nom de la classe.

L'accolade ouvrante d'une classe doit occuper sa propre ligne, et l'accolade fermante doit également occuper sa propre ligne après le corps de la classe. La liste d'héritage des

<?php
namespace Vendor\Package;
use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;
class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
 // 这里面是常量、属性、类方法
}
impléments peut également être divisée en plusieurs lignes, auquel cas chaque nom d'interface hérité doit être sur une ligne distincte, y compris la première.

<?php

namespace Vendor\Package;
use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;
class ClassName extends ParentClass implements
 \ArrayAccess,
 \Countable,
 \Serializable
{
 // 这里面是常量、属性、类方法
}

4.2. Propriétés

Chaque propriété doit avoir des modificateurs d'accès ajoutés.

Ne doit pas utiliser le mot clé var pour déclarer une propriété.

每条语句 一定不可 定义超过一个属性。

不该 使用下划线作为前缀,来区分属性是 protected 或 private。

以下是属性声明的一个范例:

<?php
namespace Vendor\Package;
class ClassName
{
 public $foo = null;
}

4.3方法

所有方法都 必须 添加访问修饰符。

不该 使用下划线作为前缀,来区分方法是 protected 或 private。

方法名称后 一定不可 有空格符,其开始花括号 必须 独占一行,结束花括号也 必须 在方法主体后单独成一行。参数左括号后和右括号前 一定不可 有空格。

一个标准的方法声明可参照以下范例,留意其括号、逗号、空格以及花括号的位置。

<?php
namespace Vendor\Package;
class ClassName
{
 public function fooBarBaz($arg1, &$arg2, $arg3 = [])
 {
 // method body
 }
}

4.4. 方法的参数

参数列表中,每个逗号后面 必须 要有一个空格,而逗号前面 一定不可 有空格。

有默认值的参数,必须 放到参数列表的末尾。

<?php
namespace Vendor\Package;
class ClassName
{
 public function foo($arg1, &$arg2, $arg3 = [])
 {
 // method body
 }
}

参数列表 可以 分列成多行,这样,包括第一个参数在内的每个参数都 必须 单独成行。

拆分成多行的参数列表后,结束括号以及方法开始花括号 必须 写在同一行,中间用一个空格分隔。

<?php
namespace Vendor\Package;
class ClassName
{
 public function aVeryLongMethodName(
 ClassTypeHint $arg1,
 &$arg2,
 array $arg3 = []
 ) {
 // 方法的内容
 }
}

4.5. abstract 、 final 、 以及 static

需要添加 abstract 或 final 声明时,必须 写在访问修饰符前,而 static 则 必须 写在其后。

<?php
namespace Vendor\Package;
abstract class ClassName
{
 protected static $foo;
 abstract protected function zim();
 final public static function bar()
 {
 // method body
 }
}

4.6. 方法及函数调用

方法及函数调用时,方法名或函数名与参数左括号之间 一定不可 有空格,参数右括号前也 一定不可 有空格。每个参数前 一定不可 有空格,但其后 必须 有一个空格。

<?php
bar();
$foo->bar($arg1);
Foo::bar($arg2, $arg3);
参数 可以 分列成多行,此时包括第一个参数在内的每个参数都 必须 单独成行。
<?php
$foo->bar(
 $longArgument,
 $longerArgument,
 $muchLongerArgument
);

5. 控制结构

控制结构的基本规范如下:

  • 控制结构关键词后 必须 有一个空格。
  • 左括号 ( 后 一定不可 有空格。
  • 右括号 ) 前也 一定不可 有空格。
  • 右括号 ) 与开始花括号 { 间 必须 有一个空格。
  • 结构体主体 必须 要有一次缩进。
  • 结束花括号 } 必须 在结构体主体后单独成行。

每个结构体的主体都 必须 被包含在成对的花括号之中,

这能让结构体更加结构话,以及减少加入新行时,出错的可能性。

5.1. if 、elseif 和 else

标准的 if 结构如下代码所示,请留意「括号」、「空格」以及「花括号」的位置,

注意 else 和 elseif 都与前面的结束花括号在同一行。

<?php
if ($expr1) {
 // if body
} elseif ($expr2) {
 // elseif body
} else {
 // else body;
}

应该 使用关键词 elseif 代替所有 else if ,以使得所有的控制关键字都像是单独的一个词。

5.2. switch 和 case

标准的 switch 结构如下代码所示,留意括号、空格以及花括号的位置。

case 语句 必须 相对 switch 进行一次缩进,而 break 语句以及 case 内的其它语句都 必须 相对 case进行一次缩进。

如果存在非空的 case 直穿语句,主体里 必须 有类似 // no break 的注释。

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

5.3. while 和 do while

一个规范的 while 语句应该如下所示,注意其「括号」、「空格」以及「花括号」的位置。

<?php
while ($expr) {
 // structure body
}

标准的 do while 语句如下所示,同样的,注意其「括号」、「空格」以及「花括号」的位置。

<?php
do {
 // structure body;
} while ($expr);

5.4. for

标准的 for 语句如下所示,注意其「括号」、「空格」以及「花括号」的位置。

<?php
for ($i = 0; $i < 10; $i++) {
 // for body
}

5.5. foreach

标准的 foreach 语句如下所示,注意其「括号」、「空格」以及「花括号」的位置。

<?php
foreach ($iterable as $key => $value) {
 // foreach body
}

5.6. try, catch

标准的 try catch 语句如下所示,注意其「括号」、「空格」以及「花括号」的位置。

<?php
try {
 // try body
} catch (FirstExceptionType $e) {
 // catch body
} catch (OtherExceptionType $e) {
 // catch body
}

6. 闭包

闭包声明时,关键词 function 后以及关键词 use 的前后都 必须 要有一个空格。

开始花括号 必须 写在声明的同一行,结束花括号 必须 紧跟主体结束的下一行。

参数列表和变量列表的左括号后以及右括号前,一定不可 有空格。

参数和变量列表中,逗号前 一定不可 有空格,而逗号后 必须 要有空格。

闭包中有默认值的参数 必须 放到列表的后面。

标准的闭包声明语句如下所示,注意其「括号」、「空格」以及「花括号」的位置。

<?php
$closureWithArgs = function ($arg1, $arg2) {
 // body
};
$closureWithArgsAndVars = function ($arg1, $arg2) use ($var1, $var2) {
 // body
};

参数列表以及变量列表 可以 分成多行,这样,包括第一个在内的每个参数或变量都 必须 单独成行,而列表的右括号与闭包的开始花括号 必须 放在同一行。

以下几个例子,包含了参数和变量列表被分成多行的多情况。

<?php
$longArgs_noVars = function (
 $longArgument,
 $longerArgument,
 $muchLongerArgument
) {
 // body
};
$noArgs_longVars = function () use (
 $longVar1,
 $longerVar2,
 $muchLongerVar3
) {
 // body
};
$longArgs_longVars = function (
 $longArgument,
 $longerArgument,
 $muchLongerArgument
) use (
 $longVar1,
 $longerVar2,
 $muchLongerVar3
) {
 // body
};
$longArgs_shortVars = function (
 $longArgument,
 $longerArgument,
 $muchLongerArgument
) use ($var1) {
 // body
};
$shortArgs_longVars = function ($arg) use (
 $longVar1,
 $longerVar2,
 $muchLongerVar3
) {
 // body
};

注意,闭包被直接用作函数或方法调用的参数时,以上规则仍然适用。

<?php
$foo->bar(
 $arg1,
 function ($arg2) use ($var1) {
 // body
 },
 $arg3
);

【推荐课程:PHP视频教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer