PHPコーディングガイドライン

自分の書いたコードが読めないのでコーディング規約をあつめて自分用のPHPコーディングガイドラインをまとめてみました。
最適化の記事も参考にしてパフォーマンスも意識してみたり。
よくわからないまままとめた箇所もあるのでおかしいところがあれば教えていただけると幸いです。

基礎

  • <?php タグでコードを開始する(<? タグは使わない)
  • PHPのみのコードは最後の ?> を含めない(使う場合は?>[LF]で終わる)
  • インデントは半角スペース4文字で(タブ文字は使わない)
  • 1行を80文字以内に抑える。長くても120文字(改行はわかりやすい箇所で)
  • 改行コードはLFで統一
  • ファイル名は拡張子をphpにする incは使わない
  • 文字連結の場合は "あああ" . "いいい" のようにして . の前後に半角スペースを入れる
  • if ,for, while, switch等の制御構造 の () 前後にスペースを入れる 制御構造の中括弧は条件と同じ行(間はスペース1個)
  • if 文の { } は省略しない 条件式には === を使った方がよい
  • # Perl/Shell形式のコメントは使ってはいけない
  • 無条件で読み込む場合はrequire_once 条件付きで読み込む場合はinclude_once 命令であり関数ではないので括弧は付けない(絶対パス指定の方が速い)
  • 文字エンコードは ISO-8859-1 を使用しなければならない(日本語だとどうなんだ?)
  • アポストロフィあるいは「シングルクォート」 で文字列を囲む
  • リテラル文字列自体にアポストロフィが含まれている場合は、 引用符あるいは「ダブルクォート」で文字列を囲んでもかまわない (SQLなど)
  • 数値添字の配列の添字は0 から始めるようにすることを推奨
  • 正規表現は、可能なら文字列関数で代用した方が速い
  • URLやメールアドレスの例を示す場合には、example.com もしくは example.org, example.net を使用する

クラス・メソッド

  • クラス名は英字で定義するのを推奨
  • クラス定義したファイルは Zend_DB → Zend/Db.php のように階層的に設置する
  • メソッド名にアンダースコア( _ ) は含めない
  • setter/getterのメソッド名は set〜、get〜の形にする
  • デフォルト値付き引数は引数リストの終わりに置く(なるべく右側)
  • クラスにはPHPDocumentor用のコメントを入れる
  • 関数定義の中括弧は次の行の関数名と同じ位置(one true brace)にしてクラス名と後の { の間に改行を加える
  • ひとつの PHP ファイルにはクラス定義をひとつだけ含めるようにする
  • メソッドの参照渡しは行わない。function a(&$a) ←メソッドにおいてこれは禁止。関数ではOKらしい
  • 返り値は () で囲まない return ($a); ←これはだめ
  • 関数呼び出し時は test(1, 2, 3); のように,の後にスペースを入れる 関数名と括弧の間にはスペース無し
  • よく使うメソッドは派生クラスに定義した方がよい
  • (PHP5)メンバ変数はメソッドの定義前にすべて定義し、varは使わない。 メンバ変数は、常に private、protected あるいは public を使用して宣言

変数・定数

  • 変数名にアンダースコア( _ ) は含めない 分かりやすい名前をつける(8-20文字くらい)
  • グローバル変数はなるべく使用しない(処理も遅い)
  • 定数名にはアンダースコアは使用可 ただしすべて大文字英数を使う
  • 文字列に変数を含める場合は "あいうえお${hensu}かきくけ" は使わない ⇒ "あいうえお$hensuかきくけ" or "あいうえお{$hensu}かきくけ"
  • 代入のイコールの左右はスペースを入れる(沢山入れて見栄えを揃えても良い(これはキリがない))
  • すべての変数は最初に初期化した方がよい
  • メソッドで2回以上参照されるすべてのグローバル/オブジェクト変数はローカル変数に格納したほうがよい
  • $row['id'] は $row[id] より速い(というかE_NOTICEらしい)
  • (PHP5)定数宣言の場合はdefineでなくconstを使う
PHPコード整形ツール

phpCodeBeautifier
http://www.doyouphp.jp/tips/tips_phpcb.shtml