>  기사  >  백엔드 개발  >  PHP의 PSR-2 코딩 스타일 사양(코드)에 대한 자세한 소개

PHP의 PSR-2 코딩 스타일 사양(코드)에 대한 자세한 소개

不言
不言앞으로
2019-04-01 10:15:101833검색

이 기사는 PHP의 PSR-2 코딩 스타일 사양에 대한 자세한 소개(코드)를 제공합니다. 이는 특정 참조 가치가 있으므로 도움이 될 수 있습니다.

다음은 PSR-1 기본 코드 사양을 계승하고 확장한 PSR-2 코딩 스타일 사양입니다.

PSR-1과 PSR-2는 PHP 개발의 기본 코딩 표준입니다. 모든 개발자가 자신에게 익숙한 개발 표준 세트를 가지고 있지만 여전히 업계 표준을 기반으로 한다고 생각합니다. .모든 표준을 확인한 후 코드를 작성합니다. PHP 개발자들에게 도움이 되길 바랍니다.

1. 개요

코드는 [PSR-1]()의 코딩 사양을 따라야 합니다.

코드는 "Tab 키" 대신 4개의 공백을 사용하여 들여쓰기해야 합니다.

한 줄당 글자 수는 80자 이내로 적당히 유지해야 합니다. 이론적으로는 120자를 넘지 않아야 하지만 하드한 제한은 없어야 합니다.

각 네임스페이스 선언문과 사용 선언 블록 뒤에는 빈 줄을 삽입해야 합니다.

클래스의 여는 중괄호({)는 클래스 선언 뒤 한 줄에 써야 하고, 닫는 중괄호(})도 클래스 본문 뒤 한 줄에 써야 합니다.

메서드의 여는 중괄호({)는 함수 선언 뒤 한 줄에 써야 하고, 닫는 중괄호(})도 함수 본문 뒤 한 줄에 써야 합니다.

클래스의 속성과 메서드에는 액세스 한정자(private, protected, public)를 추가해야 하며 abstract와 final은 액세스 한정자 앞에 선언해야 하며 static은 액세스 한정자 뒤에 선언해야 합니다.

제어 구조의 키워드 뒤에는 공백이 있어야 하지만, 메서드나 함수를 호출할 때는 공백이 있어서는 안 됩니다.

제어구조체의 여는 중괄호({)는 선언문과 같은 줄에 써야 하고, 닫는 중괄호(})는 본문 뒤의 한 줄에 써야 합니다.

제어 구조의 여는 왼쪽 괄호 뒤와 닫는 오른쪽 괄호 앞에 공백이 없어야 합니다.

1.1. 예제

다음 예제 프로그램은 위 사양의 대부분을 보여줍니다.

<?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 기본 코딩 지침

코드는 [PSR-1]( ) 모든 사양.

2.2 파일

모든 PHP 파일은 줄 종결자로 Unix LF(줄 바꿈)를 사용해야 합니다.

모든 PHP 파일은 빈 줄로 끝나야 합니다.

순수한 PHP 코드 파일에서는 마지막 ?> 닫는 태그를 생략해야 합니다.

2.3 줄의 길이

에는 엄격한 제약이 없어야 합니다.

소프트 길이 제약 조건은 120자로 제한되어야 합니다. 이 길이를 초과하면 코드 사양을 확인하는 편집기에서 경고를 표시해야 하지만 오류 프롬프트를 표시해서는 안 됩니다.

한 줄은 80자를 넘지 않아야 하며, 80자가 넘는 줄은 여러 줄로 접어야 합니다.

공백이 아닌 줄 뒤에는 추가 공백이 없어야 합니다.

빈 줄을 사용하면 코드를 더 쉽게 읽을 수 있고 코드를 덩어리지게 만드는 데 도움이 됩니다.

각 줄에는 두 개 이상의 구문이 포함될 수 없습니다.

2.4. 들여쓰기

코드는 들여쓰기를 위해 공백 4개를 사용해야 하며 탭 키를 사용할 수 없습니다.

참고: "탭 들여쓰기" 대신 공백을 사용하면

코드 차이 비교, 패치 적용, 코드 다시 읽기 및 주석 작성 시 혼란을 피할 수 있다는 장점이 있습니다.

그리고 들여쓰기에 공백을 사용하면 정렬이 더 쉬워집니다.

2.5. 키워드 및 True/False/Null

PHP 모든 키워드는 모두 소문자여야 합니다.

상수 true, false 및 null도 모두 소문자여야 합니다.

3. 네임스페이스 및 사용 선언

네임스페이스 선언 뒤에는 빈 줄을 삽입해야 합니다.

모든 용도는 네임스페이스 뒤에 선언해야 합니다.

각 use 문에는 하나의 use 키워드만 있어야 합니다.

문 블록 선언 후 빈 줄이 있어야 합니다.

예:

<?php

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

4. 클래스, 속성 및 메서드

여기서 "클래스"는 모든 "클래스 클래스", "인터페이스" 및 "재사용 가능한 코드 블록 특성"을 의미합니다.

4.1. 확장 및 상속

키워드 확장 및 구현은 클래스 이름과 같은 줄에 작성되어야 합니다.

클래스의 여는 중괄호는 자체 줄을 차지해야 하며 닫는 중괄호도 클래스 본문 다음의 자체 줄을 차지해야 합니다.

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

구현의 상속 목록은 여러 줄로 나눌 수도 있습니다. 이 경우 상속된 각 인터페이스 이름은 첫 번째 줄을 포함하여 별도의 줄에 있어야 합니다.

<?php

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

4.2. Properties

모든 속성에는 액세스 수정자가 추가되어야 합니다.

속성을 선언하기 위해 var 키워드를 사용하면 안 됩니다.

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

不该 使用下划线作为前缀,来区分属性是 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视频教程

위 내용은 PHP의 PSR-2 코딩 스타일 사양(코드)에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제