海外で人気の PHP 言語のコーディング規約(慣習)は?

海外で人気の PHP 言語のコーディング規約(慣習)は?

プログラムの書き方は人それぞれ少しづつ異なっていますが、統一されていれば読みやすくてメンテナンスしやすいプログラムになります。ただコーディング規約というものは会社毎に異なっていたりして非常に統一性にかけているのも事実です。

そこで世界の開発者達がどのようなプログラムの書き方をしているのか、GitHub に登録されている PHP ソースコードの統計情報から得られた結果を見ていきましょう。

Popular Coding Convention on Github


PHP 言語で人気のコーディングスタイルは?

インデントはスペースかタブか?

70.729% のソースコードがスペースでインデントされています。

Space

class Foo {
  function bar($baz) {
    // uses spaces for indentation
  }
}

Tab

class Foo {
    function bar($baz) {
        // uses one tab for indentation
    }
}

クラス(Class)の中括弧はどう書く?

56.63% がクラス名と中括弧の間にスペースを入れています。

Class opening/closing braces on seperate line (Allman)

class Foo
{
  // ...
}

Class structure opening/closing braces on same line as declaration (OTBS)

class Foo {
  // ...
}

if 文や while、switch 等の制御文はどう書く?

67.481% が if や while、switch の条件と中括弧の間にスペースを入れています。

Control structure opening/closing braces on same line as declaration

if($baz) {
  // ..
} elseif($bar) {
  // ..
} else {
  // ..
}

while ($i <= 10) {
  // ..
}

switch($beer) {
  // ..
}

Control structure opening/closing braces on seperate line from declaration

if($baz)
{
  // ..
}
elseif($bar)
{
  // ..
}
else
{
  // ..
}

while ($i <= 10)
{
  // ..
}

switch($beer)
{
  // ..
}

関数(メソッド)の中括弧はどう書く?

64.267% が関数名と同列に中括弧を書いています。

Method structure opening braces on same line as declaration (OTBS)

function bar($baz) {
  // ...
}

Method opening/closing braces on seperate line (Allman)

function bar($baz)
{
  // ...
}

if 文や while、switch の直後にスペースを入れる?

90.232% が条件文と中括弧の間にスペースを1個入れています。

Space around control structure Evaluation block

if ($baz) {
  // ...
} elseif ($bar) {
  // ...
} else {
  // ...
}

while ($i <= 10) {
  // ...
}

switch ($beer) {
  // ...
}

No space around control structure Evaluation block

if($baz){
  // ...
}elseif($bar){
  // ...
}else{
  // ...
}

while($i <= 10){
  // ...
}

switch($beer){
  // ...
}

if 文や while、switch 等の制御文の条件式にはスペースを入れる?

83.349% が制御文の条件にはスペースを入れていません。

No space inside control structure Evaluation block

if ($baz) {
  // ...
} elseif ($bar) {
  // ...
}

while ($i <= 10) {
  // ...
}

switch ($beer) {
  // ...
}

Space inside control structure Evaluation block

if ( $baz ) {
  // ...
} elseif ( $bar ) {
  // ...
}

while ( $i <= 10 ) {
  // ...
}

switch ( $beer ) {
  // ...
}

関数(メソッド)の関数名と引数の間にはスペースを入れる?

83.059% が関数名と引数の間にスペースは入れていません。

No space around parameter declaration block

function bar($baz){
  // ...
}

Space around parameter declaration block

function bar ($baz) {
  // ...
}

関数の引数にはスペースを入れる?

84.255% が関数の引数にはスペースを入れていません。

No space inside parameter declaration block

function bar($baz){
  // ...
}

Space inside parameter declaration block

function bar( $baz ){
  // ...
}

クラス名の付け方は?

76.625% がクラス名の名付け方は "PascalCase" という付け方をしています。

Class Name in PascalCase

class FooBarBaz {
  // ...
}

Class Name in Snake_Pascal_Case

class Foo_Bar_Baz {
  // ...
}

Class Name in snake_case

class foo_bar_baz {
  // ...
}

Class Name in camelCase

class fooBarBaz {
  // ...
}

Class Snake_first_letter_uppercase

class Foo_bar_baz {
  // ...
}

Class Name in CAPS_SNAKE_CASE

class FOO_BAR_BAZ {
  // ...
}

定数名の付け方は?

97.389% が定数には "CAPS_SNAKE_CASE" という付け方をしています。

Constant Name in CAPS_SNAKE_CASE

const BAR_BAZ = 0;

define('BAR_BAZ', 0);

Constant Name in snake_case

const bar_baz = 0;

define('bar_baz', 0);

Constant Name in camelCase

const barBaz = 0;

define('barBaz', 0);

Constant Name in PascalCase

const BarBaz = 0;

define('BarBaz', 0);

Constant Name in Snake_Pascal_Case

const Bar_Baz = 0;

define('Bar_Baz', 0);

関数名の付け方は?

74.158% が関数名に "Camel Case" という付け方をしています。

Function Name in camelCase

function barBaz(){
  // ...
}

Function Name in snake_case

function bar_baz(){
  // ...
}

Function Name in PascalCase

function BarBaz(){
  // ...
}

Function Name in CAPS_SNAKE_CASE

function BAR_BAZ(){
  // ...
}

Function Name in Snake_Pascal_Case

function Bar_Baz(){
  // ...
}

関数(メソッド)の定義順序は?

85.885% が関数定義の順番は、public の次に static というようにスコープ、static の順に付けています。

static declared after visibility

class Foo
{
  public static function bar($baz)
  {
    // ...
  }
}

abstract (or final) declared before visibility

class Foo
{
  abstract public function bar($baz);
  // ...
}

static declared before visibility

class Foo
{
  static public function bar($baz)
  {
    // ...
  }
}

abstract (or final) declared after visibility

class Foo
{
  public abstract function bar($baz);
  // ...
}

1行の長さは80文字を超える?

90.237% が1行に80文字以内でコードを書いています。

Line length is within 80 characters.

/* width is within 80 characters */

Line length is within 120 characters

/* width is within 120 characters */

Line length is within 150 characters

/* width is within 150 characters */

まとめ

GitHub には Google や Microsoft 等のエンジニアのソースコードや、プロイグラミング上級者のソースコードが多量に登録されています。彼らの書き方を真似ると良いでしょう。