coding_standard.xml 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- Reviewed: no -->
  3. <!-- EN-Revision: 15103 -->
  4. <appendix id="coding-standard">
  5. <title>Zend Framework PHP 標準コーディング規約</title>
  6. <sect1 id="coding-standard.overview">
  7. <title>概要</title>
  8. <sect2 id="coding-standard.overview.scope">
  9. <title>対象範囲</title>
  10. <para>
  11. このドキュメントは、Zend Framework に貢献してくださる開発者個人 (あるいはチーム)
  12. のためにコードの書式やドキュメント作成の指針を示すものです。
  13. Zend Framework を用いて開発をする人たちにとってもこのコーディング規約は有用でしょう。
  14. これに従えば、Zend Framework のコードとの一貫性が保てるからです。
  15. そのためには、ここで完全なコーディング規約を示す必要があります。
  16. 注意: 詳細なレベルまでの設計指針を示すこと以上に、
  17. それを標準規格として確立することが大切だと考えています。
  18. Zend Framework コーディング規約の指針は、
  19. これまで ZF プロジェクトでうまく回っていた方針をまとめたものです。
  20. この<ulink url="http://framework.zend.com/license">ライセンス</ulink>のもとで、
  21. そのまま使用するなり多少変更して使用するなりすることができます。
  22. </para>
  23. <para>
  24. ZF コーディング規約では、次のような内容を扱います。
  25. <itemizedlist>
  26. <listitem>
  27. <para>PHP ファイルの書式</para>
  28. </listitem>
  29. <listitem>
  30. <para>命名規約</para>
  31. </listitem>
  32. <listitem>
  33. <para>コーディングスタイル</para>
  34. </listitem>
  35. <listitem>
  36. <para>インラインドキュメント</para>
  37. </listitem>
  38. </itemizedlist>
  39. </para>
  40. </sect2>
  41. <sect2 id="coding-standard.overview.goals">
  42. <title>目標</title>
  43. <para>
  44. どのような開発プロジェクトであっても、コーディング規約は重要です。
  45. 特に、複数の開発者が参加するプロジェクトならなおさらです。コーディング規約に従うことで、
  46. コードの品質保持・バグの減少・保守の容易性の確保
  47. などの助けになります。
  48. </para>
  49. </sect2>
  50. </sect1>
  51. <sect1 id="coding-standard.php-file-formatting">
  52. <title>PHP ファイルの書式</title>
  53. <sect2 id="coding-standard.php-file-formatting.general">
  54. <title>全般</title>
  55. <para>
  56. PHP コードのみからなるファイルでは、終了タグ ("?>")
  57. は決して含めてはいけません。これは必須なものではなく、
  58. 終了タグを省略することで、ファイルの最後にある空白文字が出力に影響することを防ぎます。
  59. </para>
  60. <para>
  61. <emphasis>重要:</emphasis> Zend Framework の PHP ファイルやそこから派生したものの中では、
  62. <code>__HALT_COMPILER()</code> を使用して任意のバイナリデータを含めることを禁じます。
  63. この機能は、インストールスクリプトなどの特別な場合にのみ使用します。
  64. </para>
  65. </sect2>
  66. <sect2 id="coding-standard.php-file-formatting.indentation">
  67. <title>字下げ</title>
  68. <para>字下げは空白 4 文字で行います。タブ文字を使ってはいけません。</para>
  69. </sect2>
  70. <sect2 id="coding-standard.php-file-formatting.max-line-length">
  71. <title>1 行の長さ</title>
  72. <para>
  73. 1 行の長さを 80 文字までにすることを目指しましょう。すなわち、
  74. コードの長さを現実的な範囲で 80 文字までにおさめるよう努力すべきです。
  75. しかしながら、場合によっては少々長くなってしまってもかまいません。
  76. PHP コードの行の長さは、最大 120 文字までにするようにしましょう。
  77. </para>
  78. </sect2>
  79. <sect2 id="coding-standard.php-file-formatting.line-termination">
  80. <title>行末</title>
  81. <para>
  82. 行末の扱いは、標準的な Unix テキストファイルの方式にあわせます。
  83. 行末は、ラインフィード (LF) のみにしなければなりません。
  84. この文字のコードは 10、あるいは 16 進形式で 0x0A となります。
  85. </para>
  86. <para>
  87. 注意: Apple OS のようなキャリッジリターン (CR) (0x0D) や
  88. Windows OS のようなキャリッジリターンとラインフィードの組み合わせ (CRLF)
  89. (0x0D, 0x0A) を使用しないでください。
  90. </para>
  91. </sect2>
  92. </sect1>
  93. <sect1 id="coding-standard.naming-conventions">
  94. <title>命名規約</title>
  95. <sect2 id="coding-standard.naming-conventions.classes">
  96. <title>クラス</title>
  97. <para>
  98. Zend Framework では、クラスの名前が保存先ディレクトリに直接対応するような
  99. 命名規約を採用しています。ZF 標準ライブラリの最上位レベルのディレクトリは
  100. "Zend/" ディレクトリです。一方、ZF 追加ライブラリの最上位レベルのディレクトリは
  101. "ZendX/" ディレクトリです。この配下に、すべてのクラスが階層構造で保存されます。
  102. </para>
  103. <para>
  104. クラス名には英数字のみが使用できます。クラス名に数字を使用することは可能ですが、
  105. ほとんどの場合はお勧めしません。アンダースコアはパス区切り文字としてのみ使用可能です。
  106. ファイル名が "Zend/Db/Table.php" の場合、クラス名を
  107. "Zend_Db_Table" としなければなりません。
  108. </para>
  109. <para>
  110. クラス名が複数の単語から成り立つ場合は、
  111. それぞれの単語の最初の文字を大文字にしなければなりません。
  112. 大文字を連続して使用することはできません。例えば
  113. "Zend_PDF" というクラス名は許可されません。代わりに
  114. "Zend_Pdf" を使用します。
  115. </para>
  116. <para>
  117. これらの規約によって、Zend Framework 上で擬似名前空間を定義しています。
  118. PHP に名前空間機能が追加されるようになったら、Zend Framework もそれに対応させます。
  119. それにより、開発者は自分のアプリケーションで名前空間を使用できるようになります。
  120. </para>
  121. <para>
  122. 標準ライブラリや追加ライブラリのクラス名を見れば、クラス名の命名規約のよい例となるでしょう。
  123. <emphasis>重要:</emphasis> ZF ライブラリとともに配布するが、
  124. 標準ライブラリや拡張ライブラリではないもの
  125. (たとえば、アプリケーションのコードや Zend 以外が作成したライブラリなど)
  126. については、"Zend_" や "ZendX_" で始まる名前は使用できません。
  127. </para>
  128. </sect2>
  129. <sect2 id="coding-standard.naming-conventions.filenames">
  130. <title>ファイル名</title>
  131. <para>
  132. すべてのファイルにおいて、使用可能な文字は英数字・アンダースコア
  133. およびダッシュ文字 ("-") のみです。空白文字は使用できません。
  134. </para>
  135. <para>
  136. PHP コードを含むすべてのファイルの拡張子は ".php" でなければなりません。
  137. ただしビュースクリプトは例外です。次の例は、Zend Framework
  138. のクラスに使用できるファイル名を示すものです。
  139. <programlisting role="php"><![CDATA[
  140. Zend/Db.php
  141. Zend/Controller/Front.php
  142. Zend/View/Helper/FormRadio.php
  143. ]]>
  144. </programlisting>
  145. ファイル名は、上で説明したとおりの方式でクラス名と対応していなければなりません。
  146. </para>
  147. </sect2>
  148. <sect2 id="coding-standard.naming-conventions.functions-and-methods">
  149. <title>関数およびメソッド</title>
  150. <para>
  151. 関数名に含めることができるのは英数字のみです。
  152. アンダースコアを使用してはいけません。
  153. 数字を含めることは可能ですが、ほとんどの場合はお勧めしません。
  154. </para>
  155. <para>
  156. 関数名は小文字で始めなければなりません。
  157. 関数名が複数の単語で構成されている場合は、
  158. 各単語の最初の文字を大文字にしなければなりません。
  159. 一般に、このフォーマットは "camelCaps"
  160. と呼ばれています。
  161. </para>
  162. <para>
  163. 関数名は省略しすぎないようにしましょう。
  164. コードを理解しやすくするため、
  165. 現実的な範囲でできるだけ詳細な名前をつけるようにしましょう。
  166. </para>
  167. <para>
  168. 条件を満たす関数名の例を示します。
  169. <programlisting role="php"><![CDATA[
  170. filterInput()
  171. getElementById()
  172. widgetFactory()
  173. ]]>
  174. </programlisting>
  175. </para>
  176. <para>
  177. オブジェクト指向のプログラミングでは、
  178. インスタンス変数や静的変数にアクセスするためのメソッドは "get" あるいは "set"
  179. のいずれかで始めなければなりません。singleton や factory
  180. などのデザインパターンを使用する場合は、
  181. メソッド名にパターンの名前を含めるようにしましょう。こうすることで、
  182. どのパターンを使っているのかがわかりやすくなります。
  183. </para>
  184. <para>
  185. オブジェクト内で "private" あるいは "protected"
  186. と宣言されているメソッドについては、メソッド名の最初にアンダースコア
  187. 1 文字をつけなければなりません。アンダースコアを使用できるのは、
  188. この場合のみです。"public" と宣言されているメソッドについては、
  189. 決してアンダースコアで始めてはいけません。
  190. </para>
  191. <para>
  192. グローバル関数は、できる限り使用しないようにしましょう。
  193. このような関数は、静的クラスにまとめることを推奨します。
  194. </para>
  195. </sect2>
  196. <sect2 id="coding-standard.naming-conventions.variables">
  197. <title>変数</title>
  198. <para>
  199. 変数名に含めることができるのは英数字のみです。
  200. アンダースコアを使用してはいけません。
  201. 数字を含めることは可能ですが、ほとんどの場合はお勧めしません。
  202. </para>
  203. <para>
  204. クラス内で "private" あるいは "protected"
  205. と宣言されている変数については、変数名の最初にアンダースコア
  206. 1 文字をつけなければなりません。アンダースコアを使用できるのは、
  207. この場合のみです。"public" と宣言されている変数については、
  208. 決してアンダースコアで始めてはいけません。
  209. </para>
  210. <para>
  211. 関数名と同様 (上の 3.3 を参照ください)、
  212. 変数名も常に小文字で開始する "camelCaps" 方式を使用しなければなりません。
  213. </para>
  214. <para>
  215. 変数名は省略しすぎないようにしましょう。現実的な範囲で、
  216. できるだけ詳細な名前をつけるべきです。"$i" や "$n"
  217. のような省略形が許されるのは、小さなループ内で使用する場合のみです。
  218. ループが 20 行以上のコードになるようなら、
  219. そのループ変数にはそれなりの名前をつけるべきです。
  220. </para>
  221. </sect2>
  222. <sect2 id="coding-standard.naming-conventions.constants">
  223. <title>定数</title>
  224. <para>
  225. 定数名には英数字およびアンダースコアを使用することができます。
  226. 定数名には数字を使用してもかまいません。
  227. </para>
  228. <para>
  229. 定数名は、常にすべて大文字にします。
  230. </para>
  231. <para>
  232. 定数名の単語の間はアンダースコアで区切らなければなりません。
  233. 例えば <code>EMBED_SUPPRESS_EMBED_EXCEPTION</code> は許されますが、
  234. <code>EMBED_SUPPRESSEMBEDEXCEPTION</code> は許されません。
  235. </para>
  236. <para>
  237. 定数を宣言する際には、クラスのメンバとして "const"
  238. で定義しなければなりません。"define"
  239. によるグローバル定数の宣言も可能ですが、お勧めしません。
  240. </para>
  241. </sect2>
  242. </sect1>
  243. <sect1 id="coding-standard.coding-style">
  244. <title>コーディングスタイル</title>
  245. <sect2 id="coding-standard.coding-style.php-code-demarcation">
  246. <title>PHP コードの境界</title>
  247. <para>
  248. PHP のコードの区切りには、標準 PHP タグを常に使用しなければなりません。
  249. <programlisting role="php"><![CDATA[
  250. <?php
  251. ?>
  252. ]]>
  253. </programlisting>
  254. </para>
  255. <para>
  256. 短いタグは決して使用してはいけません。
  257. PHP コードのみからなるファイルでは、終了タグ ("?>")
  258. は決して含めてはいけません
  259. (<xref linkend="coding-standard.php-file-formatting.general" /> を参照ください)。
  260. </para>
  261. </sect2>
  262. <sect2 id="coding-standard.coding-style.strings">
  263. <title>文字列</title>
  264. <sect3 id="coding-standard.coding-style.strings.literals">
  265. <title>文字列リテラル</title>
  266. <para>
  267. 文字列がリテラルである (変数の展開などが含まれない)
  268. 場合は、アポストロフィあるいは「シングルクォート」
  269. で文字列を囲まなければなりません。
  270. <programlisting role="php"><![CDATA[
  271. $a = '文字列の例';
  272. ]]>
  273. </programlisting>
  274. </para>
  275. </sect3>
  276. <sect3 id="coding-standard.coding-style.strings.literals-containing-apostrophes">
  277. <title>アポストロフィを含む文字列リテラル</title>
  278. <para>
  279. リテラル文字列自体にアポストロフィが含まれている場合は、
  280. 引用符あるいは「ダブルクォート」で文字列を囲んでもかまいません。
  281. 特に SQL 文などでこのような場合がよくあるでしょう。
  282. <programlisting role="php"><![CDATA[
  283. $sql = "SELECT `id`, `name` from `people` "
  284. . "WHERE `name`='Fred' OR `name`='Susan'";
  285. ]]>
  286. </programlisting>
  287. アポストロフィをエスケープするよりも、上の構文のほうが読みやすくなるのでお勧めです。
  288. </para>
  289. </sect3>
  290. <sect3 id="coding-standard.coding-style.strings.variable-substitution">
  291. <title>変数の展開</title>
  292. <para>
  293. 変数の展開を行うには、次のような方法を使用します。
  294. <programlisting role="php"><![CDATA[
  295. $greeting = "こんにちは $name さん。ようこそ!";
  296. $greeting = "こんにちは {$name} さん。ようこそ!";
  297. ]]>
  298. </programlisting>
  299. </para>
  300. <para>
  301. 一貫性を保つため、以下の形式は許可されません。
  302. <programlisting role="php"><![CDATA[
  303. $greeting = "こんにちは ${name} さん。ようこそ!";
  304. ]]>
  305. </programlisting>
  306. </para>
  307. </sect3>
  308. <sect3 id="coding-standard.coding-style.strings.string-concatenation">
  309. <title>文字列の連結</title>
  310. <para>
  311. 文字列の連結には "." 演算子を使用しなければなりません。コードを読みやすくするため、
  312. "." 演算子の前後には常にスペースを入れなければなりません。
  313. <programlisting role="php"><![CDATA[
  314. $company = 'Zend' . ' ' . 'Technologies';
  315. ]]>
  316. </programlisting>
  317. </para>
  318. <para>
  319. 文字列を "." 演算子で連結する際には、コードを読みやすくするために
  320. ひとつの文を複数行に分けることもできます。そのような場合は、
  321. 2 行目以降の行頭にスペースを入れ、各行の "." 演算子が最初の行の
  322. "=" 演算子と同じ位置にくるようにしなければなりません。
  323. <programlisting role="php"><![CDATA[
  324. $sql = "SELECT `id`, `name` FROM `people` "
  325. . "WHERE `name` = 'Susan' "
  326. . "ORDER BY `name` ASC ";
  327. ]]>
  328. </programlisting>
  329. </para>
  330. </sect3>
  331. </sect2>
  332. <sect2 id="coding-standard.coding-style.arrays">
  333. <title>配列</title>
  334. <sect3 id="coding-standard.coding-style.arrays.numerically-indexed">
  335. <title>数値添字の配列</title>
  336. <para>添字として負の数を使用してはいけません。</para>
  337. <para>
  338. 数値添字の配列の添字は、0 以上の任意の数から始めることができます。
  339. しかし、常に 0 から始めるようにすることを推奨します。
  340. </para>
  341. <para>
  342. <code>array</code> を使用して数値添字の配列を宣言する場合は、
  343. コードを読みやすくするため、
  344. 要素を区切るカンマの後にスペースを入れなければなりません。
  345. <programlisting role="php"><![CDATA[
  346. $sampleArray = array(1, 2, 3, 'Zend', 'Studio');
  347. ]]>
  348. </programlisting>
  349. </para>
  350. <para>
  351. "array" を使用して、複数行にまたがる配列を宣言することも可能です。
  352. その場合は、2 行目以降の行頭にスペースを入れ、
  353. 各行の開始位置が以下のようになるようにしなければなりません。
  354. <programlisting role="php"><![CDATA[
  355. $sampleArray = array(1, 2, 3, 'Zend', 'Studio',
  356. $a, $b, $c,
  357. 56.44, $d, 500);
  358. ]]>
  359. </programlisting>
  360. </para>
  361. </sect3>
  362. <sect3 id="coding-standard.coding-style.arrays.associative">
  363. <title>連想配列</title>
  364. <para>
  365. 連想配列を <code>array</code> で宣言する場合には、
  366. 適宜改行をいれて複数行で宣言するようにしましょう。その場合は、
  367. 2 行目以降の行頭などにスペースを入れ、
  368. キーと値の位置がそれぞれ揃うようにしなければなりません。
  369. <programlisting role="php"><![CDATA[
  370. $sampleArray = array('firstKey' => 'firstValue',
  371. 'secondKey' => 'secondValue');
  372. ]]>
  373. </programlisting>
  374. </para>
  375. </sect3>
  376. </sect2>
  377. <sect2 id="coding-standard.coding-style.classes">
  378. <title>クラス</title>
  379. <sect3 id="coding-standard.coding-style.classes.declaration">
  380. <title>クラス宣言</title>
  381. <para>
  382. クラス宣言は、以下の Zend Framework 命名規約に従わなければなりません。
  383. </para><para>
  384. 開始波括弧は常にクラス名の下に書かなければなりません。
  385. </para><para>
  386. PHPDocumentor の標準形式のドキュメントブロックがなければなりません。
  387. </para><para>
  388. クラス内のコードは、すべて空白 4 文字で字下げします。
  389. </para><para>
  390. ひとつの PHP ファイルにはクラス定義をひとつだけ含めるようにします。
  391. </para><para>
  392. クラスファイルの中にクラス以外のコードを追加することもできますが、
  393. お勧めしません。このような場合には、クラス定義とその他のコードの間に
  394. 空行を 2 行挿入しなければなりません。
  395. </para><para>
  396. これらの条件を満たすクラス宣言の例です。
  397. <programlisting role="php"><![CDATA[
  398. /**
  399. * これがドキュメントブロックです
  400. */
  401. class SampleClass
  402. {
  403. // クラスのすべての内容は、
  404. // 空白 4 文字の字下げを使用します。
  405. }
  406. ]]>
  407. </programlisting>
  408. </para>
  409. </sect3>
  410. <sect3 id="coding-standard.coding-style.classes.member-variables">
  411. <title>クラスのメンバ変数</title>
  412. <para>
  413. メンバ変数は、以下の Zend Framework 変数命名規約に従わなければなりません。
  414. </para>
  415. <para>
  416. クラスの内部で使用する変数は、クラスの先頭 (あらゆるメソッド宣言より前)
  417. で宣言する必要があります。
  418. </para>
  419. <para>
  420. <code>var</code> 構文を使ってはいけません。メンバ変数を宣言する際には
  421. <code>private</code>、<code>protected</code> あるいは <code>public</code>
  422. のいずれかの修飾子を用いてアクセス範囲を指定します。
  423. メンバ変数を public 宣言して外部からアクセスさせることもできますが、
  424. それよりはアクセサメソッド (set/get) を使用する方式のほうを推奨します。
  425. </para>
  426. </sect3>
  427. </sect2>
  428. <sect2 id="coding-standard.coding-style.functions-and-methods">
  429. <title>関数およびメソッド</title>
  430. <sect3 id="coding-standard.coding-style.functions-and-methods.declaration">
  431. <title>関数およびメソッドの宣言</title>
  432. <para>
  433. 関数は、以下の Zend Framework 関数命名規約に従わなければなりません。
  434. </para>
  435. <para>
  436. クラス内でメソッドを宣言する際には、常に
  437. <code>private</code>、<code>protected</code> あるいは
  438. <code>public</code> のいずれかの修飾子を用いてアクセス範囲を指定しなければなりません。
  439. </para>
  440. <para>
  441. クラスと同様、波括弧は関数名の次の行に書かなければなりません。
  442. 関数名と引数定義用の開始括弧の間にはスペースを入れてはいけません。
  443. </para>
  444. <para>
  445. グローバルスコープの関数は、できるだけ使わないようにしましょう。
  446. </para>
  447. <para>
  448. クラス内の関数宣言の例として適切なものを次に示します。
  449. <programlisting role="php"><![CDATA[
  450. /**
  451. * これがドキュメントブロックです
  452. */
  453. class Foo
  454. {
  455. /**
  456. * これがドキュメントブロックです
  457. */
  458. public function bar()
  459. {
  460. // 関数のすべての内容は、
  461. // 空白 4 文字の字下げを使用します。
  462. }
  463. }
  464. ]]>
  465. </programlisting>
  466. </para>
  467. <para>
  468. <emphasis>注意:</emphasis> 値の参照渡しは、メソッドの宣言時にパラメータを渡す部分においてのみ可能です。
  469. <programlisting role="php"><![CDATA[
  470. /**
  471. * これがドキュメントブロックです
  472. */
  473. class Foo
  474. {
  475. /**
  476. * これがドキュメントブロックです
  477. */
  478. public function bar(&$baz)
  479. {}
  480. }
  481. ]]>
  482. </programlisting>
  483. </para>
  484. <para>
  485. 実行時の参照渡しは禁止されています。
  486. </para>
  487. <para>
  488. 返り値は括弧で囲んではいけません。これは可読性を下げますし、
  489. 将来そのメソッドが参照を返すようになった場合にコードが壊れてしまいます。
  490. <programlisting role="php"><![CDATA[
  491. /**
  492. * これがドキュメントブロックです
  493. */
  494. class Foo
  495. {
  496. /**
  497. * 間違いです
  498. */
  499. public function bar()
  500. {
  501. return($this->bar);
  502. }
  503. /**
  504. * 正しい形式です
  505. */
  506. public function bar()
  507. {
  508. return $this->bar;
  509. }
  510. }
  511. ]]>
  512. </programlisting>
  513. </para>
  514. </sect3>
  515. <sect3 id="coding-standard.coding-style.functions-and-methods.usage">
  516. <title>関数およびメソッドの使用法</title>
  517. <para>
  518. 関数の引数を指定する際は、引数を区切るカンマの後に空白をひとつ入れます。
  519. 例えば 3 つの引数を受け取る関数をコールする場合の例は、
  520. 以下のようになります。
  521. <programlisting role="php"><![CDATA[
  522. threeArguments(1, 2, 3);
  523. ]]>
  524. </programlisting>
  525. </para>
  526. <para>
  527. コール時に引数を参照渡しすることは禁じます。
  528. 関数への引数を参照渡しにする方法は、
  529. 関数宣言についての節を参照ください。
  530. </para>
  531. <para>
  532. 引数として配列を受け取る関数については、関数コールの中に
  533. "array" 構文を含め、それを複数行に分けることもできます。
  534. そのような場合の記述法は、以下のようになります。
  535. <programlisting role="php"><![CDATA[
  536. threeArguments(array(1, 2, 3), 2, 3);
  537. threeArguments(array(1, 2, 3, 'Zend', 'Studio',
  538. $a, $b, $c,
  539. 56.44, $d, 500), 2, 3);
  540. ]]>
  541. </programlisting>
  542. </para>
  543. </sect3>
  544. </sect2>
  545. <sect2 id="coding-standard.coding-style.control-statements">
  546. <title>制御構造</title>
  547. <sect3 id="coding-standard.coding-style.control-statements.if-else-elseif">
  548. <title>If/Else/Elseif</title>
  549. <para>
  550. <code>if</code> および <code>elseif</code> 系の制御構造では、
  551. 条件を指定する括弧の前に空白をひとつ入れなければなりません。
  552. また、条件指定の括弧を閉じた後にも空白をひとつ入れなければなりません。
  553. </para>
  554. <para>
  555. 括弧で囲まれた条件文の中では、演算子の前後にも空白をいれなければなりません。
  556. また、条件の論理的な区切りを明確にするため、
  557. 条件文の中でも積極的に括弧を使用することを推奨します。
  558. </para>
  559. <para>
  560. 開始波括弧は、条件文と同じ行に記述します。
  561. 終了波括弧は、常に改行してそれのみで記述します。
  562. 波括弧の中では、空白 4 文字の字下げを使用します。
  563. <programlisting role="php"><![CDATA[
  564. if ($a != 2) {
  565. $a = 2;
  566. }
  567. ]]>
  568. </programlisting>
  569. </para>
  570. <para>
  571. "elseif" あるいは "else" を含む "if" 文の場合の決まりは、通常の "if" と同じです。
  572. 次の例は、"if" 文に "else" や "elseif" が含まれる場合のものです。
  573. <programlisting role="php"><![CDATA[
  574. if ($a != 2) {
  575. $a = 2;
  576. } else {
  577. $a = 7;
  578. }
  579. if ($a != 2) {
  580. $a = 2;
  581. } elseif ($a == 3) {
  582. $a = 4;
  583. } else {
  584. $a = 7;
  585. }
  586. ]]>
  587. </programlisting>
  588. 場合によっては、これらの文で波括弧が必要ない場合もあります。
  589. しかし、このコーディング規約では、このような例外を認めません。
  590. "if"、"elseif" あるいは "else" 文では、常に波括弧を使用しなければなりません。
  591. </para>
  592. <para>
  593. "elseif" を使用することは可能ですが、推奨されません。代わりに
  594. "else if" を使用してください。
  595. </para>
  596. </sect3>
  597. <sect3 id="coding-standards.coding-style.control-statements.switch">
  598. <title>Switch</title>
  599. <para>
  600. "switch" を使用した制御文では、
  601. 条件を指定する括弧の前に空白をひとつ入れなければなりません。
  602. また、条件指定の括弧を閉じた後にも空白をひとつ入れなければなりません。
  603. </para>
  604. <para>
  605. "switch" 文の中身は、空白 4 文字の字下げを使用します。
  606. 各 "case" 文の中身は、さらに 4 文字ぶん字下げします。
  607. </para>
  608. <programlisting role="php"><![CDATA[
  609. switch ($numPeople) {
  610. case 1:
  611. break;
  612. case 2:
  613. break;
  614. default:
  615. break;
  616. }
  617. ]]>
  618. </programlisting>
  619. <para>
  620. <code>switch</code> 文の <code>default</code> は、
  621. 決して省略してはいけません。
  622. </para>
  623. <para>
  624. <emphasis>注意:</emphasis> 各 <code>case</code> の最後に
  625. <code>break</code> や <code>return</code> を記述せず、意図的に
  626. 次の <code>case</code> に処理を流すという書き方をする場合もあるでしょう。
  627. これらの場合を単なる記述漏れと区別するために、<code>case</code> 文で
  628. <code>break</code> あるいは <code>return</code> を指定しなかった場合は
  629. "// break intentionally omitted" (訳注:「意図的に break を省略しました」)
  630. というコメントを含めるようにします。
  631. </para>
  632. </sect3>
  633. </sect2>
  634. <sect2 id="coding-standards.inline-documentation">
  635. <title>インラインドキュメント</title>
  636. <sect3 id="coding-standards.inline-documentation.documentation-format">
  637. <title>ドキュメントの書式</title>
  638. <para>
  639. ドキュメントブロック ("docblocks") は、phpDocumentor
  640. と互換性のある書式でなければなりません。
  641. phpDocumentor の書式については、このドキュメントの対象範囲外です。
  642. 詳細な情報は <ulink url="http://phpdoc.org/">http://phpdoc.org/</ulink>
  643. を参照ください。
  644. </para>
  645. <para>
  646. Zend Framework のために書かれたコード、あるいはフレームワーク上で操作するコードは、
  647. 各ファイルの最初に「ファイルレベル」の docblock、
  648. そして各クラスの直前に「クラスレベル」の docblock
  649. を含めなければなりません。以下に docblock の例を示します。
  650. </para>
  651. </sect3>
  652. <sect3 id="coding-standards.inline-documentation.files">
  653. <title>ファイル</title>
  654. <para>
  655. PHP コードを含むすべてのファイルは、最低限これらの
  656. phpDocumentor タグを含むドキュメントブロックを、
  657. ファイルの先頭に記述しなければなりません。
  658. <programlisting role="php"><![CDATA[
  659. /**
  660. * ファイルについての短い説明
  661. *
  662. * ファイルについての長い説明 (もしあれば)...
  663. *
  664. * LICENSE: ライセンスに関する情報
  665. *
  666. * @copyright 2008 Zend Technologies
  667. * @license http://framework.zend.com/license BSD License
  668. * @version $Id:$
  669. * @link http://framework.zend.com/package/PackageName
  670. * @since File available since Release 1.5.0
  671. */
  672. ]]>
  673. </programlisting>
  674. </para>
  675. </sect3>
  676. <sect3 id="coding-standards.inline-documentation.classes">
  677. <title>クラス</title>
  678. <para>
  679. 各クラスには、最低限これらの phpDocumentor タグを含む
  680. docblock が必要です。
  681. <programlisting role="php"><![CDATA[
  682. /**
  683. * クラスについての短い説明
  684. *
  685. * クラスについての長い説明 (もしあれば)...
  686. *
  687. * @copyright 2008 Zend Technologies
  688. * @license http://framework.zend.com/license BSD License
  689. * @version Release: @package_version@
  690. * @link http://framework.zend.com/package/PackageName
  691. * @since Class available since Release 1.5.0
  692. * @deprecated Class deprecated in Release 2.0.0
  693. */
  694. ]]>
  695. </programlisting>
  696. </para>
  697. </sect3>
  698. <sect3 id="coding-standards.inline-documentation.functions">
  699. <title>関数</title>
  700. <para>
  701. オブジェクトのメソッドを含めたすべての関数には、
  702. 最低限以下の内容を含む docblock が必要です。
  703. <itemizedlist>
  704. <listitem><para>関数についての説明</para></listitem>
  705. <listitem><para>すべての引数</para></listitem>
  706. <listitem><para>返り値</para></listitem>
  707. </itemizedlist>
  708. </para>
  709. <para>
  710. "@access" タグは必要ありません。なぜなら、
  711. アクセスレベルについては関数宣言の際の
  712. "public"、"private" あるいは "protected" によってわかっているからです。
  713. </para>
  714. <para>
  715. 関数/メソッドが例外をスローする場合には、すべての既知の例外クラスに対して @throws を使用します。
  716. <programlisting role="php"><![CDATA[
  717. @throws exceptionclass [description]
  718. ]]>
  719. </programlisting>
  720. </para>
  721. </sect3>
  722. </sect2>
  723. </sect1>
  724. </appendix>
  725. <!--
  726. vim:se ts=4 sw=4 et:
  727. -->