#nofollow
#norelated
社内PHPコーディング規約 [#e71f308e]
命名規則 [#i2661d37]
ファイルの拡張子 [#raf6db52]
| classファイル |
.class.php |
| テンプレートファイル |
.tpl、.html(どちらかに統一) |
| 上記以外のファイル |
.php |
クラス名(ファイル名) [#a4b24b98]
- クラス名には英数字のみ使用。
- クラス名から内容が理解しやすい名前を付ける。略語の使用は極力控えること。
- クラス名に動詞を含める場合、基本的に "動詞 + 名詞" の形式にする。
- クラスファイルの拡張子は ".class.php" で統一。~
(クラス名が DebugUtil であれば、ファイル名は "DebugUtil.class.php" となる)
Exceptionクラス [#j5491f3a]
- 例外クラスは、クラス名のサフィックスとして "Exception" を付ける。~
例外名が "OutOfMemory" である場合、クラス名は "OutOfMemoryException"、~
ファイル名は "OutOfMemoryException.class.php" になる。
変数名 [#r942a76b]
- 変数は$(ドル)マークから始まる
- 変数名は、アルファベットもしくは「_(アンダースコア)」から始まり、~任意の数のアルファベットもしくは数字もしくはアンダースコアが続く
クラス定数 [#b60843c4]
- 基本的に大文字とし、アルファベットもしくは「_(アンダースコア)」が使用可能。~
- クラス定数を定義する場合は、constを使用する。(PHP5より)~
メンバ変数 [#j24564cd]
メソッド名 [#f3dae122]
- メソッド名には英数字のみ使用可能です。(メソッド名に数字を含めることはお勧めできません)
- メソッド名から内容が理解しやすい名前を付けるべきです。略語の使用は極力控えて下さい。
- メソッド名は Camel形式に従う必要があります
- メソッド名に動詞を含める場合、基本的に "動詞 + 名詞" の形式にする必要があります。
DAOメソッド [#qe33940a]
DAO メソッドは、Data Access Object という名の通り、使用目的に合わせて分かりやすい名前を付けるべきです。~
下表にメソッド命名のいくつかの例を示します。
| function |
return |
example name |
| レコードの取得 |
object |
find, fetchRow, load... |
| array |
find{condition}Hash, findToArray... |
| 全レコードの取得 |
object |
findAll, find{condition}Hash, findObject, findToPager... |
| array |
findAllHash, findToArray... |
| レコードが存在するかどうかチェック |
bool |
isExists{condition}, search... |
| レコードの追加 |
bool, int, void |
insert, create, save... |
| レコードの更新 |
bool, int, void |
update, modify, saveOrUpdate... |
| レコードの削除 |
bool, int, void |
delete, remove... |
テンプレート [#rb5df013]
- テンプレートファイルは、対応するアクション名を全て小文字に変換した名前を使用する。~
クラス名が複数の単語から構成される場合、単語の区切りをアンダーバー ("_") で区切る。~
(FooBarAction.class.php であれば、テンプレート名は foo_bar.tpl)
共通 [#ka2cf7ca]
対象性 [#ee0d3fa1]
- クラス名、メソッド名を付ける場合は、名前の対称性に注意する。~
- add / remove
- insert / delete
- get/ set
- start / stop
- begin / end
- send / receive
- first / last
- get / release
- put / get
- up / down
- show / hide
- source / target
- open / close
- source / destination
- increment / decrement
- lock / unlock
- old / new
- next / previous
フォルダ構成 [#f331dc49]
ファイルの構成 [#hf30b8e1]
ドキュメンテーションコメント(phpDocumentor) [#hcd6fd1a]
/**
* ファイルについての短い説明
*
* ファイルについての長い説明 (もしあれば)...
*
* LICENSE: ライセンスに関する情報
*
* @copyright 2005 Zend Technologies
* @license http://www.zend.com/license/3_0.txt PHP License 3.0
* @version CVS: $Id:$
* @link http://dev.zend.com/package/PackageName
* @since File available since Release 1.2.0
*/
/**
* クラスについての短い説明
*
* クラスについての長い説明 (もしあれば)...
*
* @copyright 2005 Zend Technologies
* @license http://www.zend.com/license/3_0.txt PHP License 3.0
* @version Release: @package_version@
* @link http://dev.zend.com/package/PackageName
* @since Class available since Release 1.2.0
* @deprecated Class deprecated in Release 2.0.0
*/
@throws exceptionclass [description]
インデント [#v4207c22]
- インデントの単位として,4個分の半角スペースを推奨する.
- インデントが実際に半角スペースによって行われるかタブによって行われるかについては,これを規定しない.
- タブはすべて(4個ではなく)8個分の半角スペースでなければならない.
行の長さ [#vf5fdcb0]
行の折返し [#r15e826b]
式を1行で書ききれない場合,以下の原則に基づいて複数の行に分割する.
- コンマの後で区切る.
- 演算子の前で区切る.
- low-level よりも hi-level において分割する.
- 2つ目以降のインデントでは,前の行と同じ位置に左端を揃える.
以上のルールによって分かりにくいコードになったり右の方に偏ってしまう場合には,4個分の半角スペースではなく8個分の半角スペースを使用する.
someMethod(longExpression1, longExpression2, longExpression3,
longExpression4, longExpression5);
var = someMethod1(longExpression1,
someMethod2(longExpression2,
longExpression3));
longName1 = longName2 * (longName3 + longName4 - longName5)
+ 4 * longname6; // こちらの方が良い
longName1 = longName2 * (longName3 + longName4
- longName5) + 4 * longname6; // これは避ける
// 慣例的なインデント
someMethod(int anArg, Object anotherArg, String yetAnotherArg,
Object andStillAnother) {
...
}
// 深いインデントを避けるために8個分の半角スペースをとってインデント
private static synchronized horkingLongMethodName(int anArg,
Object anotherArg, String yetAnotherArg,
Object andStillAnother) {
...
}
- if 文での行の折り返し例(if 文での行の折り返しは,4個分の半角スペースのインデントでは本体(ブロック内部)の見通しが悪くなるため,一般的に8個分の半角スペースを使う。)
// こうしちゃいけない
if ((condition1 && condition2)
|| (condition3 && condition4)
||!(condition5 && condition6)) { // 悪い改行
doSomethingAboutIt(); // この行が分かりにくくなる
}
// こうしよう
if ((condition1 && condition2)
|| (condition3 && condition4)
||!(condition5 && condition6)) {
doSomethingAboutIt();
}
// あるいはこうする
if ((condition1 && condition2) || (condition3 && condition4)
||!(condition5 && condition6)) {
doSomethingAboutIt();
}
alpha = (aLongBooleanExpression) ? beta : gamma;
alpha = (aLongBooleanExpression) ? beta
: gamma;
alpha = (aLongBooleanExpression)
? beta
: gamma;
コメント [#f6453624]
インプリメンテーション・コメント [#gf7dd04e]
- コメントの記述には、/* .... */ 形式もしくは、 // ... 形式を使用する。
- コードに対するコメントか,特定の実装に対するコメントである。
ドキュメンテーション・コメント(ドキュメンテーション・コメントは............) [#u179fb3e]
- コメントの記述には、/** ...*/ 形式を使用する。
- そのコードの実装に依存しない視点での定義を記述し,開発者がソースコードを見ないでもその役割を把握できるようにするものである。
コメント記述時の留意点 [#e3dd3e72]
コメントは,コードの概観と,コード自体からは読み取ることのできない付加的な情報を与えるものであるべきである.
また,そのプログラムを読んで理解するのに適した情報のみを含んでいるべきである。
たとえば,対応したパッケージがどのように構築されてどのディレクトリに保存されるかといったような情報は,コメントに含まれるべきではない。
※注意:頻繁にコメントを書かなければいけないような状況は,それが良くない品質のコードであることを反映している場合がしばしばある.もしもコメントを書かなければいけないという強迫観念を感じたときは,そのコードをもっと分かりやすく書くことができないか熟考する.;
宣言 [#qe55addc]
1つの行に書く宣言の数 [#n1e784e3]
- 行につき1つの宣言だけを書くようにして,コメントを書きやすくする。
var $_level; // インデントのレベル
var $_size; // テーブルのサイズ
public $_id; // ID
protected $_level; // インデントのレベル
private $_size; // テーブルのサイズ
配置 [#vc72fec8]
- 宣言は,ブロックの冒頭においてのみ行う(ブロックとは,"{" と "}" で囲まれたコード)。
最初に使われるまで宣言するのを待つようなことはしない。
プログラマを混乱させ,そのスコープ内でのコードのポータビリティを妨げることになる。
function myMethod() {
$int1 = 0; // メソッド・ブロックの開始
if (condition) {
$int2 = 0; // if ブロックの開始
...
}
}
クラスとインターフェースの宣言 [#g0bb440b]
- メソッド名と "(" との間にはスペースを空けない
- 宣言文の後に来る "{" の前には1個の半角スペースを空ける
- "}" は,ブロックの中が空で "{" の直後に来るような場合を除いて,それが対応する文と同じインデントレベルにインデントする。
class Sample extends Object {
private $_hoge;
private $_fuga;
public function __construct() {}
public function setIvar($i) {
$_hoge = $i;
}
private function emptyMethod() {}
...
}
文 [#aeded3c9]
単一の文 [#u00344db]
if 文,if-else 文,if else-if else 文 [#ia58a69d]
if (条件) {
文;
}
if (条件) {
文;
} else {
文;
}
if (条件) {
文;
} else if (条件) {
文;
} else{
文;
}
for 文 [#k9711dc3]
for (初期化; 条件; 更新) {
文;
}
while 文 [#z1611c82]
while (条件) {
文;
}
do-while 文 [#uacf7d2d]
do {
文;
} while (条件);
switch 文 [#zd0da4ce]
switch 文は,以下の形式で書く。
switch (条件) {
case 0:
文;
/* 次の行も実行する */
case 1:
文;
break;
case 2:
文;
break;
default:
文;
break;
}
try-catch 文 [#k5dc4ae9]
try {
文;
} catch (ExceptionClass $e) {
文;
}
空白 [#w9da3edd]
空白行 [#l5e4ba23]
- 連続した2行の空白行が常に使用されるべき状況
- 1つの空白行が常に使用されるべき状況
- 各メソッド間の区切り
- メソッド内のローカル変数と最初の文との間の区切り
- メソッドの中の論理的なセクションを区切って可読性を上げる場合
空白スペース [#v4f36654]
- 空白スペースが使用されるべき状況
- メソッドの引数を区切るコンマ(,)の後には,空白スペースを1つ入れる
- for 文の中の式は,「;」の後に空白スペースを入れて分割する。
for ($expr1; $expr2; $expr3)
ネーミング [#u001a35f]
参考資料:代表的な命名記法 [#p00d9658]
先頭単語のみすべて小文字とし、それ以降の単語は先頭文字のみ大文字。~
単語間の接続は何も設けない。~
例:myFirstName ~
すべての単語の先頭文字を大文字とし、それ以外の文字はすべて小文字。~
単語間の接続は何も設けない。~
例:MyFirstName ~
すべての単語は小文字。~
単語間の接続にアンダーバー( _ )を使用する。~
例:my_first_name
参考資料:PHP内部で使用されている名前 [#fdc5c819]
最終更新:2007年02月14日 15:46