PHPの標準コーディング規約いろいろ

標準コーディング規約(コーディング規約とかコーディング標準などとも言う)とは、プログラムソースに関して、変数名やメソッド名、改行やタブなどの、コーディングに対する各種のルールを定めたものである。

この、コーディング標準のような明快なルールがあると、開発効率やメンテナンス性の向上に役立つ。

というわけで、いくつかの標準をご紹介。

PEAR標準コーディング規約

Manual::標準コーディング規約

WordPressにもコーディング規約があって、そちらと矛盾する部分もあるのが悩ましい。

要約すると以下のような感じ。

実際にはここでは書ききれないほど細かく定義があって、そりゃーもう大変だが、専用のチェックツールも用意されている。

インデントはスペース4つで、タブは使用しない。

こうすると、diff や patch、CVS history や annotations に問題が生じないとのことだが、タブを使っても問題は出ないような。。。

if や for などの制御構造のカッコの前後にスペースを入れる。

if ($foo) {
    bar();
}

関数コールにはカンマとパラメータの間にスペースをおく。

ちなみに、カッコの内側にはスペースを置かないことに注意。
また、イコールの前後にはスペースを入れる。

$foo = bar($par1, $par2, $par3);

値の代入

2行連続して値を代入する場合は、以下のようにイコールの位置をそろえる。

$var      = bar();
$variable = foo();

1行あたりの文字数

76文字以内とする。
これを守るのに、いろいろと工夫が必要(^^;)

関数定義

以下のように開始波カッコの前に改行する。またデフォルト値があるパラメータは最後に定義する。

function myfunc($par1, $par2 = 0)
{
  return $par1 + $par2;
}

命名規則

話せば長いのでこちらを。

WordPress コーディング基準

WordPress コーディング標準

PEAR 標準コーディング規約に似ているが、いくつかの点が違う。
また、PEAR側で触れられていない点にも言及されている。

インデントは本物のタブを使用する

「スペースはダメ」と明快に書かれていることに注意。
ただし、何かを整列させて読みやすくしたいコードブロックがあれば、最初のインデントはタブを使い、その後でスペースで差分を埋めることができるとのこと。

スペース

コンマの後ろや、論理演算子、代入演算子の両側、開きカッコ、閉じカッコの両側には、常にスペースを入れる。

$foo = bar( $par1, $par2, $par3 );

命名規則

単語と単語の間にアンダースコアを使用する。PEARではクラスメソッドのみcamelCase()のように2つ目以降の単語の先頭を大文字にする必要があるが、WordPressではこれを禁じている。

その他

WordPress のコーディング標準にはSQL文などについても記述されている。

株式会社 社会式株 PHPコーディング規約

このコーディング規約はとてもユニーク。

以前に「これはネタですよね?」と言われたことがあるが、これはこれで理にかなっていて、興味深かった。

プロジェクトチームのスキルが低い場合は、こういう選択肢もありだと思う。

株式会社 社会式株 PHPコーディング規約

要約すると以下のような感じ。

  • PEARやSmartyなどのツールは学習コストが高いので使用しない。
  • PHPUNIT で自動テストを行うが、あまり期待しすぎないこと。
  • DBアクセスにのみPEARを使用する。それ以外ではPEARを使用しない。
  • オブジェクト指向禁止。(オブジェクト指向にしたいなら選択する言語が間違っているという趣旨だと思う。)
  • ライブラリは使用禁止。あまり優秀でないプログラマに引き継ぐ際に足かせになるとのこと。(バグ修正などで影響範囲が広くなってしまうことを言っているのだと思う。)
  • HTMLとPHPコードの分離。WordPress のテンプレートタグのようなイメージで書けということだと思う。
  • ファイル構造は単純に。

その他のコーディング規約

以上いくつかのコーディング規約を紹介したが、それぞれ思想があって、とても興味深いと思う。