| 1 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
| 2 |
<html lang="ja" dir="ltr"> |
| 3 |
<head> |
| 4 |
<meta http-equiv="Content-Language" content="ja"> |
| 5 |
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> |
| 6 |
<meta http-equiv="Content-Style-Type" content="text/css"> |
| 7 |
<meta http-equiv="Content-Script-Type" content="text/javascript"> |
| 8 |
<title>DDW - DPF コーディング規約 - コーディングスタイル</title> |
| 9 |
<link href="../css/DPF.css" rel="stylesheet" type="text/css"> |
| 10 |
</head> |
| 11 |
<body> |
| 12 |
<div id="header"><h1>DPF コーディング規約 - コーディングスタイル</h1></div> |
| 13 |
<div id="contents"> |
| 14 |
<ul> |
| 15 |
<li><a href="#policy">基本方針</a></li> |
| 16 |
<li><a href="#phpFormat">PHP の書式</a> |
| 17 |
<ul> |
| 18 |
<li><a href="#phpTag">PHP コードの開始と終わり</a></li> |
| 19 |
<li><a href="#indent">インデント</a></li> |
| 20 |
<li><a href="#lineLimit">1 行辺りの長さ</a></li> |
| 21 |
<li><a href="#requireFile">ファイルの読み込み</a></li> |
| 22 |
<li><a href="#comment">コメント</a></li> |
| 23 |
</ul> |
| 24 |
</li> |
| 25 |
<li><a href="#stringAndArray">文字列と配列</a> |
| 26 |
<ul> |
| 27 |
<li><a href="#literal">文字列リテラル</a></li> |
| 28 |
<li><a href="#joinString">文字列の結合</a></li> |
| 29 |
<li><a href="#array">配列</a></li> |
| 30 |
</ul> |
| 31 |
</li> |
| 32 |
<li><a href="#controlStructure">制御構造 |
| 33 |
</a> |
| 34 |
<ul> |
| 35 |
<li><a href="#controlStructureCommonStyle">制御構造における共通スタイル</a></li> |
| 36 |
<li><a href="#if">if / else / else if</a></li> |
| 37 |
<li><a href="#for">for</a></li> |
| 38 |
<li><a href="#switch">switch case</a> </li> |
| 39 |
</ul> |
| 40 |
</li> |
| 41 |
<li><a href="#class">クラス</a> |
| 42 |
<ul> |
| 43 |
<li><a href="#defineClass">クラスの宣言</a></li> |
| 44 |
<li><a href="#defineClassMember">クラスメンバの宣言</a></li> |
| 45 |
<li><a href="#defineClassMethod">関数及びメソッドの宣言</a></li> |
| 46 |
<li><a href="#classConstantName">クラス定数</a></li> |
| 47 |
</ul> |
| 48 |
</li> |
| 49 |
</ul> |
| 50 |
<h2><a name="policy"></a>基本方針</h2> |
| 51 |
<p>本コーディング規約は、DPF Framework によるアプリケーション開発のコーディングルール、推奨する指針を提供するものです。DPF におけるコーディング指針は、コードの保守性を一定以上に保ち、新しいコードをデベロッパがすばやく理解できるよう、ソフトウェアの可読性を向上させるものです。実際のコーディングに当たっては、メンバ全員が規約を正しく理解している必要があります。</p> |
| 52 |
<h2><a name="phpFormat" id="phpFormat"></a>PHP の書式 </h2> |
| 53 |
<h3><a name="phpTag" id="phpTag"></a>PHP コードの開始と終わり</h3> |
| 54 |
<p>PHP のプログラムを記述するにあたり、標準的な次のタグを宣言する必要があります。短縮形の "<? ?>" を使うと、OS や設定が異なる環境でコードが読み込まれない可能性があります。 </p> |
| 55 |
<dl> |
| 56 |
<dt>PHP タグの明示化</dt> |
| 57 |
<dd><?php<br> |
| 58 |
?></dd> |
| 59 |
</dl> |
| 60 |
<p>PHP スクリプトだけで構成されるファイルの場合、終了タグ ("?>") は含めてはいけません。これは、改行コードが出力される問題を回避します。</p> |
| 61 |
<h3><a name="indent"></a>インデント</h3> |
| 62 |
<p>プログラムを読みやすくするため、適宜インデントを挿入して下さい。インデントには、2 つの空白記号を使用します。タブは使用環境により幅が異なるため使用しないで下さい。</p> |
| 63 |
<dl> |
| 64 |
<dt>インデントの例</dt> |
| 65 |
<dd>{<br> |
| 66 |
// 2 つの空白記号を使用 <br> |
| 67 |
$foo = 0; <br> |
| 68 |
}</dd> |
| 69 |
</dl> |
| 70 |
<h3><a name="lineLimit"></a>1 行辺りの長さ</h3> |
| 71 |
<p>プログラムにおける 1 行辺りの長さは 80 文字程度に抑えるよう目指して下さい。(長くても 120 文字程度まで)</p> |
| 72 |
<h3><a name="requireFile"></a>ファイルの読み込み</h3> |
| 73 |
<p>プログラム中に読み込みたいクラスファイルは、基本的に全て config/class_load.ini に定義して下さい。 それ以外のファイルは、適時 require_once を用いて読み込みます。<br> |
| 74 |
尚、require_once は命令であり関数ではないため、括弧を付けてはいけません。</p> |
| 75 |
<h3><a name="comment" id="comment"></a>コメント</h3> |
| 76 |
<p>プログラム中にコメントを記述する上での規約は次の通りです。</p> |
| 77 |
<ul> |
| 78 |
<li>Perl、Shell 形式のコメント ("#") は使えません。インラインブロック ("//"、あるいは "/*〜*/") を使用して下さい。 </li> |
| 79 |
<li>コメント中の英数字は半角文字で記述して下さい。これは、プログラムコードに対し grep を実行する際に有効です。 </li> |
| 80 |
<li>プログラム中のコメントは多ければ良いというものではありません。コードだけでは説明が足りない部分に書くべきです。</li> |
| 81 |
</ul> |
| 82 |
<h2><a name="stringAndArray" id="stringAndArray"></a>文字列と配列</h2> |
| 83 |
<h3><a name="literal"></a>文字列リテラル</h3> |
| 84 |
<p>リテラル文字列はシングルクォートで括ります。ただし例外的に、シングルクォートを含む文字列の場合は、ダブルクォートで括っても構いません。</p> |
| 85 |
<dl> |
| 86 |
<dt>文字列リテラルの例</dt> |
| 87 |
<dd>$var = 'stock'; <br> |
| 88 |
$var = "stock's" </dd> |
| 89 |
</dl> |
| 90 |
<h3><a name="joinString"></a>文字列の結合</h3> |
| 91 |
<p>複数の文字列を結合する場合は、"." 演算子を用います。"." の前後には常に 1 つの空白記号を入れて下さい。文字列が複数行に渡る場合は、2 行目以降の "." 演算子位置が "=" の位置になるよう調整する必要があります。</p> |
| 92 |
<dl> |
| 93 |
<dt>文字列結合の例</dt> |
| 94 |
<dd>$var = 'Http' . 'Request';<br> |
| 95 |
<br> |
| 96 |
$sql = 'select count(foo) '<br> |
| 97 |
. 'from bar '<br> |
| 98 |
. 'where ...'; </dd> |
| 99 |
</dl> |
| 100 |
<h3><a name="array"></a>配列</h3> |
| 101 |
<p>配列を定義する上での規約は次の通りです。</p> |
| 102 |
<ul> |
| 103 |
<li>配列を使用する前に、array() を用いて配列型を宣言します。</li> |
| 104 |
<li>配列に要素を指定する場合、カンマ区切りの直後に 1 つの空白記号を入れる必要があります。</li> |
| 105 |
</ul> |
| 106 |
<dl> |
| 107 |
<dt>配列宣言の例</dt> |
| 108 |
<dd>$array = array(1, 2, 3, 'foo', 'bar'); |
| 109 |
<br> |
| 110 |
<br> |
| 111 |
// 配列を宣言せずに $foo を使用してはいけません <br> |
| 112 |
$foo['bar'] = 'in'; <br> |
| 113 |
</dd> |
| 114 |
</dl> |
| 115 |
<h2><a name="controlStructure"></a>制御構造</h2> |
| 116 |
<h3><a name="controlStructureCommonStyle" id="controlStructureCommonStyle"></a>制御構造における共通スタイル</h3> |
| 117 |
<ul> |
| 118 |
<li>条件括弧の前後には 1 つの空白記号を挿入して下さい。</li> |
| 119 |
<li>条件開始の括弧 ({) は条件文と同じ行に明記してください。 </li> |
| 120 |
<li>条件式中の演算子の前後には 1 つの空白記号を挿入して下さい。</li> |
| 121 |
<li>終了括弧は常に改行して下さい。括弧内でのインデントには 2 つの空白記号を用います。 </li> |
| 122 |
<li>条件内のコードが 1 行であったとしても、終了括弧は省略してはいけません。 </li> |
| 123 |
</ul> |
| 124 |
<h3><a name="if" id="if"></a>if / else / else if </h3> |
| 125 |
<ul> |
| 126 |
<li>複数の条件を "&"、"||" で指定する場合、条件文を分かりやすくするために内括弧を使うべきです。 </li> |
| 127 |
<li>"elseif" は推奨されません。代わりに "else if" を使用して下さい。</li> |
| 128 |
<li>文字列が格納されているかチェックする場合、"if ($foo)" といった判定式は危険です。($foo に "0" が格納されている場合、if 文は false を返します) 必ず isset 関数を使用して下さい。</li> |
| 129 |
</ul> |
| 130 |
<dl> |
| 131 |
<dt>if / else / elseif の例 </dt> |
| 132 |
<dd>if ($condition == 0) {<br> |
| 133 |
$var = 0; <br> |
| 134 |
} else if ($condition == 1) {<br> |
| 135 |
$var = 1; <br> |
| 136 |
} else {<br> |
| 137 |
$var = 2; <br> |
| 138 |
}</dd> |
| 139 |
</dl> |
| 140 |
<h3><a name="for" id="for"></a>for</h3> |
| 141 |
<ul><li>";" の後には 1 つの空白記号を挿入します。</li> |
| 142 |
</ul> |
| 143 |
<dl> |
| 144 |
<dt>for の例 </dt> |
| 145 |
<dd>for ($i = 0; $i < $cnt; $i++) {<br> |
| 146 |
... <br> |
| 147 |
}</dd> |
| 148 |
</dl> |
| 149 |
<h3><a name="switch" id="switch"></a>switch case </h3> |
| 150 |
<ul> |
| 151 |
<li>各 case 条件の内容は 2 つの空白記号を挿入して下さい。 </li> |
| 152 |
<li>default 条件は必須です。</li> |
| 153 |
<li>各 case 条件において、処理を抜ける break 文は必須です。ただし、次の case 条件に処理を移す場合、明示的な注釈コメントを付けておくべきです。("break intentionally omitted" など)</li> |
| 154 |
</ul> |
| 155 |
<dl> |
| 156 |
<dt>switch case の例 </dt> |
| 157 |
<dd>switch ($condition) |
| 158 |
{<br> |
| 159 |
case $a:<br> |
| 160 |
break;<br> |
| 161 |
case $b:<br> |
| 162 |
break;<br> |
| 163 |
default:<br> |
| 164 |
break; |
| 165 |
<br> |
| 166 |
}<br> |
| 167 |
</dd> |
| 168 |
</dl> |
| 169 |
<h2><a name="class" id="class"></a>クラス</h2> |
| 170 |
<h3><a name="defineClass"></a>クラスの宣言</h3> |
| 171 |
<p>クラスを定義する上での規約は次の通りです。</p> |
| 172 |
<ul> |
| 173 |
<li>クラスの開始括弧は、常に 1 行改行して宣言して下さい。クラス名と開始括弧の間に空白文字は入りません。</li> |
| 174 |
<li>クラス内のコードは全て 2 つの空白記号でインデントを行います。</li> |
| 175 |
<li>PHPDocumentor 形式のドキュメントブロックを定義する必要があります。</li> |
| 176 |
<li>1 つの PHP クラスには 1 クラスのみ定義します。クラスファイルには、極力その他のコードを定義しないよう目指して下さい。</li> |
| 177 |
</ul> |
| 178 |
<p>次にコーディング規約に則ったクラス定義の例を示します。</p> |
| 179 |
<dl> |
| 180 |
<dt>クラス定義の例</dt> |
| 181 |
<dd>/**<br> |
| 182 |
* ドキュメントブロック。<br> |
| 183 |
*/ |
| 184 |
<br> |
| 185 |
class Foo<br> |
| 186 |
{<br> |
| 187 |
}</dd> |
| 188 |
</dl> |
| 189 |
<h3><a name="defineClassMember"></a>クラスメンバの宣言</h3> |
| 190 |
<p>クラスメンバ変数を定義する上での規約は次の通りです。</p> |
| 191 |
<ul> |
| 192 |
<li>var は使用せず、常にアクセス修飾子 (public、private、protected) を付けて下さい。 </li> |
| 193 |
<li>メンバ変数は、public、private、protected の順に宣言して下さい。</li> |
| 194 |
<li>static 指示子がある場合は先頭に宣言します。(ただしクラス定数がある場合は、クラス定数の後に定義します)</li> |
| 195 |
<li>public メンバ変数にはアクセサ (setXXX, getXXX) を用いてアクセスして下さい。</li> |
| 196 |
<li>グローバル変数は極力使用するべきではありません。 </li> |
| 197 |
<li>プライベート変数名は、アンダーバー ("_") から始まります。これは、ローカル変数 (及びメソッド引数) との扱いに混乱を招かないための処置です。</li> |
| 198 |
</ul> |
| 199 |
<h3><a name="defineClassMethod" id="defineClassMethod"></a>関数及びメソッドの宣言</h3> |
| 200 |
<p>関数及びメソッドを定義する上での規約は次の通りです。</p> |
| 201 |
<ul> |
| 202 |
<li>関数、メソッドの定義は、"one true brace" 表記に従って下さい。(サンプルコード参照)</li> |
| 203 |
<li>クラス内のメソッドの場合、アクセス修飾子 (public、private、protected) を必ず宣言して下さい。</li> |
| 204 |
<li>関数、メソッドの開始括弧は、常に 1 行改行して宣言して下さい。関数名と開始括弧の間に空白文字は入りません。</li> |
| 205 |
<li>グローバル変数は極力使用するべきではありません。</li> |
| 206 |
<li>空メソッドを定義する場合、開始括弧と終了括弧の間に改行は入りません。</li> |
| 207 |
<li>戻り値は括弧で括るべきではありません。</li> |
| 208 |
<li>クラスメソッドは、public、private、protected の順に宣言して下さい。 </li> |
| 209 |
<li>コンストラクタを宣言する際は、統一コンストラクタ (__construct) を使用して下さい。 </li> |
| 210 |
<li>デフォルト値を有する引数は、引数リストの最後に定義します。</li> |
| 211 |
</ul> |
| 212 |
<p>次にコーディング規約に則ったメソッド定義の例を示します。</p> |
| 213 |
<dl> |
| 214 |
<dt>メソッド定義の例 (one true brace 表記) </dt> |
| 215 |
<dd>class Bar <br> |
| 216 |
{ <br> |
| 217 |
public function foo()<br> |
| 218 |
{<br> |
| 219 |
return 0; <br> |
| 220 |
}<br> |
| 221 |
}<br> |
| 222 |
</dd> |
| 223 |
</dl> |
| 224 |
<h3><a name="classConstantName" id="defineClassMethod"></a>クラス定数</h3> |
| 225 |
<p>クラス定数を定義する上での規約は次の通りです。</p> |
| 226 |
<ul> |
| 227 |
<li>クラス定数は、クラス開始直後の行で宣言する必要があります。</li> |
| 228 |
<li>クラス定数名は、全て大文字で宣言します。複数の単語を組み合わせる場合は、アンダーバー ("_") を使用して下さい。 </li> |
| 229 |
<li>クラス定数にアクセスする際は、"クラス名::定数名" の形式でアクセスします。"::" の前後に空白は含めません。 </li> |
| 230 |
</ul> |
| 231 |
<p class="right"><a href="#">上へ</a></p> |
| 232 |
</div> |
| 233 |
</body> |
| 234 |
</html> |