過去ログ/PHPコーディング・ガイドライン(JET SET)

2019年5月2日 (木) 10:12時点におけるIppei Suzuki (トーク | 投稿記録)による版
※この記事は 過去ログ に含まれている記事です

ファイル構成

ファイル名

クラスはそのクラス名に.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 の条件の中では、代入を行わない。バグの元。

更新履歴

  • written by Eishi Kuroda(2006-10-16)
  • arranged by Ippei Suzuki(2009-11-20)

参考