簡単比較！見ただけでわかるPHPコーディング規約

# PHPコーディング規約  
PHPには、**PSR** (PHP標準コーディング規約) という規約が存在するのですが、基本はこれに従って書くのが一般的とされています。
ここではPSRをざっくり実際のコード例を交えながらまとめてみました。

各フレームワークにもそれぞれのコーディング規約が存在しますし、チームによって独自のルールを設けているところもあると思います。
優先度的には、
**チームの独自規約** → **各フレームワークの規約** → **PSR**
がいいのではないかと思います。

特にSESでいろんな現場でいろんなフレームワークを使う人にとっては、PSR準拠のコードを把握しているとどんな現場でも対応しやすいのではないでしょうか。

# PSR-1  
基本コーディング規約
## 概要  
- PHPコードは <?php ?> か <?= ?>


```php:×よくない書き方
<? echo $name; ?>
```

```php:○よい書き方
<?php echo $name; ?>
<?= $name; ?>
```
<br>

- 呼んだだけで動く系(副作用系)と宣言系は一緒のファイルに書かない。


```php:test.php（よくない書き方）
<?php
$count = 1;
define('MAX_NUM', 10);

```
↓下記のように2ファイルに分ける  

```php:test.php（よい書き方）
<?php
$count = 1;

```


```php:test_conf.php（よい書き方）
<?php
define('MAX_NUM', 10);

```

<br>

- クラス名は大文字始まり。  
- 定数は大文字(アンダースコア区切り)  
- メソッドはキャメルケース(小文字始まり)


```php:×よくない書き方
<?php

class test extends base
{
    const max_num = 5;   
 
    public function test_method()
    {
        //処理
    }
}

```


```php:○よい書き方
<?php

class Test extends Base
{
    const MAX_NUM = 5;   
 
    public function testMethod()
    {
        //処理
    }
}

```
<br>

# PSR-2  
コーディングスタイルガイド
## 名前空間・use等  
- namespace定義のあとには空行を1行。  
- use定義ブロック後も同様に1行空行。  

```php:×よくない書き方
<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Foo;
class Test
{

```
```php:○よい書き方
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Foo;

class Test
{

```

## クラス・プロパティ・メソッド
- クラスの開き括弧は次の行、閉じ括弧は本文最後の次の行。  
- メソッドも開き括弧は次の行、閉じ括弧は本文最後の次の行。  
- アクセス修飾子はすべてのプロパティ、メソッドに定義。  
- プロパティ名やメソッド名に、protectedまたはprivateを示すためにアンダースコアを使用すべきではない。  
- 引数リストではそれぞれカンマの前にスペースがあってはいけない。また。カンマの後ろに1スペース置かなければならない。  
- デフォルト値を持つ引数は引数リストの最後に配置。  

```php:×よくない書き方
<?php

class Foo extends Hoge{
    private function _sample_function($b = null ,$a){
        // 処理
    }
}

```
```php:○よい書き方
<?php

class Foo extends Hoge
{
    private function sampleFunction($a, $b = null)
    {
        // 処理
    }
}

```

## 記述  
- インデントには４つのスペース  
- PHPだけが書かれたファイルには、最後に空行  
- PHPだけが書かれたファイルでは、終了タグ ?> 省略。  
- 行末に空白文字列を含んではいけない。  
- 1行の文字数が80文字を超えるべきではない。

```php:×よくない書き方
<?php

foreach ($arr as $value) {
  echo $value;  
}

?>
```
```php:○よい書き方
<?php

foreach ($arr as $value) {
    echo $value;
}

```

<br>

- PHPの予約語は小文字。  
- PHP定数である、true, false, nullは小文字。  
- 空行は可読性やコードのまとまりを示すため適切に加えてよい。  
- 引数、変数リストはインデントをそろえることで複数行に分割してもよい。


```php:×よくない書き方
<?php

if ($condition === TRUE) {
```
```php:○よい書き方
<?php

if ($condition === true) {
    $test = [
        'name' => $name,
        'url'  => $url,
    ];
    
    return $test;
}

//　上記のように可読性を高めるための空行や行分割は可能
```

## 制御構文等  
- 制御構文の開始時はその後に1スペースあける。(メソッドや関数の呼び出しではあけない)  
- 制御構文の開き括弧は同じ行、閉じ括弧は本文最後の次の行。  
- 構文本文は1インデント下げる。  
- else ifではなく、elseifを使うべき。(1単語に見えるように)  

```php:×よくない書き方
<?php

if($num === 5)
{
    // if body
}else if($num === 10){
    // elseif body
}else{
    // else body
}

```
```php:○よい書き方
<?php

if ($num === 5) {
    // if body
} elseif ($num === 10) {
    // elseif body
} else {
    // else body
}

```
<br>


- foreach、try catchは以下のように。

```php:○よい書き方
<?php

foreach ($arr as $key => $value) {
    // foreach body
}

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

```

# 参考サイト  
[PSR-2 コーディングガイド（日本語）](http://www.infiniteloop.co.jp/docs/psr/psr-2-coding-style-guide.html)