forked from NEKOGET/FuelPHP_docs_jp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
coding_standards.html
371 lines (273 loc) · 13.2 KB
/
coding_standards.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
<!doctype html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="./../assets/css/combined.css">
<link rel="shortcut icon" href="./../favicon.ico" />
<script src="http://www.google.com/jsapi" type="text/javascript"></script>
<script type="text/javascript">
var path = './../';
</script>
<script src="./../assets/js/combined.js"></script>
<title>コーディング標準 - 概要 - FuelPHP ドキュメント</title>
</head>
<body>
<div id="container">
<header id="header">
<div class="table">
<h1>
<a href="http://fuelphp.com"><img height="37px" width="147px" src="./../assets/img/fuel.png" /></a>
<strong>Documentation</strong>
</h1>
<form id="google_search">
<p>
<span id="search_clear"> </span>
<input type="submit" name="search_submit" id="search_submit" value="検索" />
<input type="text" value="" id="search_input" name="search_input" />
</p>
</form>
</div>
<nav>
<div class="clear"></div>
</nav>
<a href="#" id="toc_handle">目次</a>
<div class="clear"></div>
</header>
<div id="cse">
<div id="cse_point"></div>
<div id="cse_content"></div>
</div>
<div id="main">
<h2>コーディング標準</h2>
<p>コード書式や文書の標準は Fuel に貢献するひとはすべて従う必要があります。
このガイドラインを読んでいない貢献はすべて受け入れられません。</p>
<h3 id="file_formatting">ファイル書式</h3>
<h5 id="closing_php_tag">PHP タグの閉じ方</h5>
<p>PHP のコードだけしか含まないファイルは常に PHP の閉じタグ (?>) を省略します。
これは見つけにくい「死の白い画面」を避けるためです。</p>
<h5 id="indentation">インデント</h5>
<p>すべてのインデントはスペースではなくタブを使用すべきです。<br/>
しかし、インデント後の整形はタブではなくスペースを使用します。</p>
<pre class="php"><code> // 2 つのタブでインデント
$var = 'something'; // インデントはタブを使用、値とコメントの
$variable = 'else'; // 縦並びの整形はスペースを使用</code></pre>
<h5 id="line_endings">行の末尾</h5>
<p>行の末尾は Unix 形式の LF にします。</p>
<h5 id="file_naming">ファイル名</h5>
<p>すべてのファイル名は、すべて小文字にしなければなりません。例外はありません。</p>
<h5 id="encoding">エンコーディング</h5>
<p>ファイルは UTF-8 で保存し、BOM は使用しません。</p>
<h3 id="naming_conventions">命名規則</h3>
<h5 id="namespaces">名前空間</h5>
<p>コアクラスはすべて Fuel\Core というネームスペースにします。</p>
<pre class="php"><code>namespace Fuel\Core;</code></pre>
<h5 id="classes">クラス</h5>
<p>クラス名は単語の境界にアンダースコアを使用し、クラス名の各単語は大文字で始めます。
しかし、アンダースコアはオートロードの際にディレクトリの区切り記号に変換されます。
キャメルケースの使用は避けてください。しかし、サブディレクトリにクラスを置くことが意味がない場合には
避けることができません。</p>
<pre class="php"><code>namespace Fuel\Core;
class Session
{
}</code></pre>
<pre class="php"><code>namespace Fuel\Core;
class Session_Cookie extends Session_Driver
{
}</code></pre>
<p>これは、次のようなファイルパスになります:</p>
<pre class="php"><code>core/classes/session.php
core/classes/session/cookie.php</code></pre>
<h5 id="methods_standards">メソッド</h5>
<p>クラス名同様、メソッド名は単語の境界でキャメルケースではなくアンダースコアを使用します。
メソッド名はすべて小文字です。スコープ (public, protected, private) は常に含めます。<br/>
名前の1文字目にアンダースコアを使用できます。これはメソッドが protected/private であることを明記したり、
必要に迫られて public にしたメソッドを protected/private とみなして欲しいことを表明するためです。</p>
<pre class="php"><code>class Session
{
public static function get_flash($name, $data)
{
// ここにコードを記述する
}
}</code></pre>
<pre class="php"><code>class View
{
// ビューに関するグローバルデータの配列
protected static $_global_data = array();
protected static function capture($view_filename, array $view_data)
{
// ここにコードを記述する
}
}</code></pre>
<h5 id="variables">変数</h5>
<p>変数名は簡潔にし、小文字とアンダースコアだけを含むようにします。
ループイテレータは短く、なるべく単一文字にするようにします。</p>
<pre class="php"><code>$first_name
$buffer
for ($i = 0; $i < $max; $i++)</code></pre>
<h5 id="constants">定数</h5>
<p>定数は全て大文字にすること以外は変数と同じガイドラインに
従います。</p>
<pre class="php"><code>MY_CONSTANT
TEMPLATE_PATH
TEXT_DEFAULT</code></pre>
<h3 id="keywords">キーワード</h3>
<p><kbd>true</kbd>, <kbd>false</kbd>, <kbd>null</kbd>, <kbd>as</kbd> などのようなキーワードは、すべて小文字にします。大文字は定数のために予約されているためです。
同じことが <kbd>array</kbd>, <kbd>integer</kbd>, <kbd>string</kbd> のようなプリミティブ型にも当てはまります。</p>
<pre class="php"><code>$var = true;
$var = false;
$var = null;
foreach ($array as $key => $value)
public function my_function(array $array)
function my_function($arg = null)</code></pre>
<h3 id="control_structures">制御構造</h3>
<p><kbd>if</kbd>, <kbd>for</kbd>, <kbd>foreach</kbd>, <kbd>while</kbd>, <kbd>switch</kbd> のような制御に関するキーワードのあとにはスペースを入れ、
パラメータや引数のリストまたは値を続けます。ブレースは新しい行にします。
<kbd>break</kbd> は case と同じインデントにします。</p>
<pre class="php"><code>if ($arg === true)
{
//ここで何かする
}
elseif ($arg === null)
{
//ここで何か別のことをする
}
else
{
//ここで何かするキャッチオール
}
foreach ($array as $key => $value)
{
//ここでループする
}
for ($i = 0; $i < $max; $i++)
{
//loop here
}
while ($i < $max)
{
//ここでループする
}
do
{
//ここでループする
}
while ($i < $max)
switch ($var)
{
case 'value1':
//ここで何かする
break;
default :
//ここで何かする
break;
}</code></pre>
<h5 id="alternative_if">もう 1 つの if 文</h5>
<p>ある場合において、完全な <kbd>if</kbd> 文が単純な条件や関数呼び出しにしてはコードが多すぎることがあります。
このような場合、 より短い論理演算子構文を使用することで、PHP の実行ロジックを使用できます。
<kbd>and</kbd> を使用すると、最初の部分が true である場合のみ2番目の部分が実行されます。
<kbd>or</kbd> を使用すると、最初の部分が false である場合のみ2番目の部分が実行されます。<br/>
<kbd>if</kbd> や <kbd>else</kbd> が必要な場合は使用しないでください。単一の条件文のような場合にのみ使用してください。</p>
<pre class="php"><code>// if (isset($var)) { Config::set('var', $var); } の代替
isset($var) and Config::set('var', $var);
// if ( ! isset($var)) { $var = Config::get('var'); } の代替
isset($var) or $var = Config::get('var');
// これをしてはいけません
Uri::segment(3) and $var = Uri::segment(3);
Uri::segment(3) or $var = 'default';
// こちらのほうがいいです:
if (Uri::segment(3))
{
$var = Uri::segment(3);
}
else
{
$var = 'default';
}
// またはこうします:
$var = Uri::segment(3) ? Uri::segment(3) : 'default';
// または実際にはこうします:
$var = Uri::segment(3) ?: 'default';</code></pre>
<h3 id="comparison_logical">比較と論理演算子</h3>
<p>関数/メソッドの返値や変数を比較するには型に注意します。たとえば、関数が <kbd>false</kbd> を返すときに、
この返値を <kbd>===</kbd> や <kbd>!==</kbd> のような型に注意した演算子を使用して比較します。
さらに <kbd>and</kbd> や <kbd>or</kbd> を使用することが、<kbd>&&</kbd> や <kbd>||</kbd> よりも読みやすさの観点から好ましいです。
場合によってはこれを避けることができないこともありますので、必要に応じて <kbd>&&</kbd> や <kbd>||</kbd> を使用します。<kbd>!</kbd> を使用する場合は、両端にスペースを置きます。</p>
<pre class="php"><code>if ($var == false and $other_var != 'some_value')
if ($var === false or my_function() !== false)
if ( ! $var)</code></pre>
<h5 id="class_interface">クラス/インターフェースの定義</h5>
<p>クラス/インターフェースの定義では次の行に開始ブレースを置きます:</p>
<pre class="php"><code>class Session
{
}</code></pre>
<p>クラスが空の場合、ブレースは定義と同じ行に置きます:</p>
<pre class="php"><code>class Empty_Class { }</code></pre>
<h5 id="function_method">関数/メソッド/クロージャの宣言</h5>
<p>関数/メソッド/クロージャの開始ブレースは常に次の行から始め、
構文と同じインデントにします。</p>
<pre class="php"><code>class Session
{
public static function get_flash($name, $data)
{
$closure = function($a, $b)
{
// クロージャのコードをここに
}
}
}</code></pre>
<h5 id="variables">変数</h5>
<p>変数を初期化する際に、1 行に 1 つの変数を宣言します。コードの可読性をあげるために、各変数は別の行にします。
値とコメントは適切に整形します。</p>
<pre class="php"><code>$var = ''; // 1 行に 1 つ
$other_var = ''; // 1 行に 1 つ</code></pre>
<h5 id="brackets_parenthesis">ブラケットと丸カッコ</h5>
<p>開始ブラケット/丸カッコの前後にはスペースをいれません。閉じブラケット/丸カッコの前にスペースをいれません。</p>
<pre class="php"><code>$array = array(1, 2, 3, 4);
$array['my_index'] = 'something';
for ($i = 0; $i < $max; $i++)</code></pre>
<h5 id="quotation">文字列のクォート</h5>
<p>なるべくダブルクォートよりもシングルクォートを使用します。</p>
<h5 id="concatenation">連結</h5>
<p>文字列の連結は結合するパーツ間にスペースをいれません。</p>
<pre class="php"><code>//yes
$string = 'my string '.$var.' the rest of my string';
//no
$string = 'my string ' . $var . ' the rest of my string';</code></pre>
<h5 id="operators">演算子</h5>
<pre class="php"><code>$var = 'something';
if ($var == 'something') //論理演算子の前後にスペースをいれる
$var = $some_var + $other_var; //算術演算子の前後にスペースをいれる
$var++; // 加算演算子の前にスペースをいれない
++$var; //加算演算子の後にスペースをいれない</code></pre>
<h5 id="dot-notation">配列のドット表記</h5>
<p>
厳密に言えばコーディング標準ではありませんが、このフレームワークのクラス内やこのドキュメントで多用されていますし、
PHPでの表記として一般的でないため、このフレームワークに不慣れな人を混乱させるかも知れません。
</p>
<pre class="php"><code>// "always_load.packages = array()" は次のコードの省略表現です:
array("always_load" => array("packages" => array(...) ) );
</code></pre>
<p>この表記は Arr クラスで使われますが、Lang クラス、Config クラスそして Session クラスでも、多次元配列から個々の要素に素早くアクセスするために使われます。</p>
<pre class="php"><code>// このような構造の配列がある場合
$array = array(
"always_load" => array(
"packages" => array(
"orm",
"package" => "/my/special/package.php",
)
)
);
// 次のコードは "/my/special/package.php" を返します:
$path = Arr::get($array, 'always_load.packages.package');
</code></pre>
</div>
<footer>
<p>
© FuelPHP Development Team 2010-2016 - <a href="http://fuelphp.com">FuelPHP</a> is released under the MIT license.
[ <a href="https://github.com/fuel/docs/commits/1.8/develop/general/coding_standards.html">原文コミット履歴</a> | <a href="https://github.com/NEKOGET/FuelPHP_docs_jp/commits/1.8/develop_japanese/general/coding_standards.html">翻訳コミット履歴</a> | <a href="https://github.com/NEKOGET/FuelPHP_docs_jp/blob/1.8/develop_japanese/general/coding_standards.html">GitHubで修正</a> ]
</p>
</footer>
</div>
</body>
</html>