【php】いまどきのPHPコーディング規約 PSR
問題
phpのコーディングスタイルについて。
- phpのコーディング規約、どれを採用したらいいんだ?
- プログラム書くときに、今風だぜっていうのを自分の基準にしたいんだけど!
答え
そんなあなたに PSR。
PEAR、Agavi、CakePHP、Drupal、Symfony2、Zend Framework 2 他多数のプロジェクトの開発者が参加して作っている、phpの新しいコーディング規約。
この辺を参照。
「PSR PHP」などで検索すれば、日本語の解説もたくさんある。
よくある、迷うところ、論争になるところについては、以下のようにするのが推奨されている。
- PHPファイルの改行はLFで。
- ファイルがPHPのみの場合 ?> は省略する。
- インデントはスペース4つ、タブを使わない。
- キーワードは小文字で記述する。true、false、null などは小文字で記述する。
-
クラス定義はこんな感じ。波括弧は独立した行に。extendsは続けて1行で。
<?php namespace Vendor\Package; use FooClass; use BarClass as Bar; use OtherVendor\OtherPackage\BazClass; class ClassName extends ParentClass implements \ArrayAccess, \Countable { // constants, properties, methods }
-
メソッドの定義はこんな感じ。括弧の前後にスペースは入れない。波括弧は独立した行に。引数のカンマの後に空白を(改行して書く書き方もあり)。
<?php namespace Vendor\Package; class ClassName { public function fooBarBaz($arg1, &$arg2, $arg3 = []) { // method body } }
-
abstract finalアクセス権の前に置く。staticはアクセス権の後に置く。
<?php namespace Vendor\Package; abstract class ClassName { protected static $foo; abstract protected function zim(); final public static function bar() { // method body } }
- else if はだめ。 elseif を使え。
- else、elseifの前後の開きブレース、閉じブレースは同じ行に。
<?php if ($expr1) { // if body } elseif ($expr2) { // elseif body } else { // else body; }
-
switch文はこんな風に。switchの次でインデント、caseの次もインデント。
<?php switch ($expr) { case 0: echo 'First case, with a break'; break; case 1: echo 'Second case, which falls through'; // no break case 2: case 3: case 4: echo 'Third case, return instead of break'; return; default: echo 'Default case'; break; }
同意しかねるところもあるかもしれませんが、自分の書き方を見直すきっかけにしたり、他の人を説得するのに使えると思います。
まささん 2013年5月2日 17:52
タブ使わない、タブ乱用の自分考えさせられます。
タブキー押したら、自動でスペース4つになる設定とかないかな。。
yoshimura 2013年5月5日 01:09
エディタによって設定方法はまちまちだけど、そういう設定があることが多いですね。