「過去ログ/PHPコーディング・ガイドライン(JET SET)」の版間の差分
Ippei Suzuki (トーク | 投稿記録) ページの作成:「 '''※この記事は 過去ログ に含まれている記事です''' written by Eishi Kuroda(2006-10-16) arranged by Ippei Suzuki(2009-11-20) == ファイル構…」 |
Ippei Suzuki (トーク | 投稿記録) 編集の要約なし |
||
| 1行目: | 1行目: | ||
'''※この記事は [[過去ログ]] に含まれている記事です''' | '''※この記事は [[過去ログ]] に含まれている記事です''' | ||
written by Eishi Kuroda(2006-10-16) | * written by Eishi Kuroda(2006-10-16) | ||
arranged by Ippei Suzuki(2009-11-20) | * arranged by Ippei Suzuki(2009-11-20) | ||
== ファイル構成 == | == ファイル構成 == | ||
| 166行目: | 166行目: | ||
== 参考 == | == 参考 == | ||
* [http://framework.zend.com/manual/ja/coding-standard.html Zend Framework PHP 標準コーディング規約] | |||
* [http://pear.php.net/manual/en/standards.php PEAR Coding Standards] | |||
* [http://phpdoc.org/ phpDocumentor] | |||
* [http://www.objectclub.jp/community/codingstandard/ オブジェクト倶楽部 コーディング規約の会] | |||
2019年5月2日 (木) 10:11時点における版
※この記事は 過去ログ に含まれている記事です
- written by Eishi Kuroda(2006-10-16)
- arranged by Ippei Suzuki(2009-11-20)
ファイル構成
ファイル名
クラスはそのクラス名に.class.phpを付けた1ファイルにする。
例:class Memberは、Member.class.phpに入れる。
ディレクトリとパッケージ
PHPはパッケージ(名前空間)をまだ実現していないので、クラス名などの重複に気を付ける。 Zendの規約では、ディレクトリ構造にあわせて /Hoge/Fuga/AClass.class.phpの場合、クラス名をHoge_Fuga_AClassとかするのが良いということだが、クラス名などが長くなり過ぎてやってられないので無視。
テストクラス名
クラスClassNameのユニットテストクラスを書く場合、ClassNameTestとする。テストクラスは、アプリケーションルートの下のtestフォルダ以下に作成する。
例:CustomerクラスならCustomerTest.class.phpを作成
命名規則
PHPのクラス名や変数名は、大文字小文字を区別しないので、その点に注意する。
ファイル名
クラス名・インターフェース名は、ファイル名と同じにする。
例:class Memberは、Member.class.phpに入れる。
クラス名
Pascal Casing(先頭大文字、以下単語の頭を大文字) 略語は、それ自体を1単語とみなす。つまり、PDFViewerとかではなく、PdfViewer。 実装クラスで、特にInterfaceと区別の必要があれば、最後にImplを付ける。
例: class SomeEntity, class SomeInterestServiceImpl
インターフェース名
基本的にクラスと同じ。クラスと区別する場合頭にIを付ける。
例: interface ISomeInterestService class SomeInterestServiceImpl implements ISomeInterestService
抽象クラス名
抽象クラス名に適当な名前が無いとき、 Abstract から始まりサブクラス名を連想させる名前を付ける。
例: abstract class AbstractBeforeSubClassName
定数
大文字の単語を"_"でつないだもの。
例: const UPPERCASE_WITH_UNDERSCORES = 0;
パブリック・メソッド/プロテクテッド・メソッド/関数名
Camel Casing(先頭小文字、以下単語の頭を大文字) 略語は、それ自体を1単語とみなす。つまり、ID, DBとかではなく、Id, Db。
例 : public function getId()
プライヴェート・メソッド名
Camel Casingで、先頭に"_"
例 : private function _getDateOfBirth()
パブリック・フィールド/プロテクテッド・フィールド
基本的に使わない。 Camel Casing(先頭小文字、以下単語の頭を大文字)
例 : public $firstName
プライヴェート・フィールド名
Camel Casingで、先頭に"_"
例 : private $_dateOfBirth
ローカル変数名
Camel Casing。
例 : $priceTotal
boolean値を返すメソッド
is + 形容詞、can + 動詞、has + 過去分詞、三単元動詞、三単元動詞 + 名詞。
良い例: isEmpty() canGet() hasChanged() contains(x) containsKey(key)
悪い例: empty() //「空にする」という動詞的な意味に取れる。 checkXXX() // trueがどちらの意味か分かりづらい。
boolean型変数
形容詞、is + 形容詞、can + 動詞、has + 過去分詞、三単元動詞、三単元動詞 + 名詞。
$isEmpty $dirty $containsMoreElements
ループカウンタ
スコープが狭いループカウンタに $i, $j, $k という名前をこの順に使う。 正し、ループが数行以上に渡る場合、意味的に分かりやすい変数名を使用する
例:
foreach ($members as $memberIndex) {
//...何かの処理
foreach ($addresses as $addressIndex) {
//...何かの処理
}
}
変数名一般
変数名から役割が読み取れる名前を付ける。 意味不明な短い変数や頭文字の略を使う位なら、20文字位ある変数の方が良い。 感じとしては、$numberOfPeopleOnTheUsOlympicTeamとか$maximumNumberOFPointsInModernOlympicsは長すぎだけど、$teamMemberCountや$teamPointsMaxはいい感じ、とか。 また、意味を持たない$temp, $data, $str, $bufなどは使わないようにする。
悪い例: $data, $inputRec, function copy($s1, $s2) 良い例: $staff, $employeeData, function copy($source, $destination)
スコープが狭い変数名は、型名を略したものを使って良い。
例: DataSet ds = new DataSet()
その他
インデント
インデントは、ソフトタブ(2タブ)。
メソッド/フィールドの宣言
public, protected, private、とスコープを明示的に指定する。
フィールド
クラスのフィールドはpublicにしない。必要なフィールドに対してget, setメソッドを作ってアクセスする。
ローカル変数の再利用は悪
ローカル変数を使い回しするより、新しいものを宣言して初期化する。
悪い例: (ある関数の中での処理)
for ($i = 0; $i < $n; $i++) {
//iを使う
}
for ($i = 0; $i < $n; $i++) {
//またiを使う
}
$i = $n - $delta * 2; // またまた再利用
良い例:
for ($i = 0; $i < $n; $i++) {
//iを使う
}
for ($j = 0; $j < $n; $j++) {
//jを使う
}
$total = $n - $delta * 2; //別の意味のある変数名
if/while 条件中の "="
if, while の条件の中では、代入を行わない。バグの元。