日本Symfonyユーザ会にて日本語ドキュメントが公開されています。そちらを参考にしてください。
コーディング規約 | Symfony2日本語ドキュメント
http://docs.symfony.gr.jp/symfony2/contributing/code/standards.html
コーディング規約 | Symfony2日本語ドキュメント
http://docs.symfony.gr.jp/symfony2/contributing/code/standards.html
日本語訳(下書き):
Coding Standards — Documentation
http://docs.symfony-reloaded.org/contributing/code/standards.html
Coding Standards — Documentation
http://docs.symfony-reloaded.org/contributing/code/standards.html
コーディング規約
Symfony2 にコードを提供する場合は、以下のコーディング規約に従う必要があります。 手短に言うと、大原則は次の通りです。既存の Symfony2 コードを模倣してね。
構造
- ショートタグ (<?) は決して使用しないこと。
<? // ダメ
<?php // たとえばこうする
- クラスファイルをいつもの終了タグ (?>) で終わらせないこと。
class MyClass { ... } ?> // ダメ
class MyClass { ... } // ?> で閉じない
- インデントは 4 つのスペースで行うこと (タブは許可しません)。
if ('NG') { <\t>echo 'タブはダメ、絶対';
if ('OK') { echo '半角スペース 4 つでインデント';
- 行の最後はラインフィード (LF; 0x0A) を使うこと。
if (!strncmp(PHP_OS, 'WIN', 3)) { echo 'Windows だと改行コードは \r\n (CRLF) になってるかもっ!';
if (!strcmp(PHP_OS, 'Linux')) { echo 'Linux だと改行コードは \n (LF) になってるはずっ!';
- コンマ区切りの後ろにはスペースを 1 つ入れること。
if ('NG') { // いろいろとダメ $arr = array('a','b' ,'c'); echo 'Hello',' ', 'Symfony2';
if ('OK') { // こうする $arr = array('a', 'b', 'c'); echo 'Hello', ' ', 'Symfony2';
- 開き丸括弧の後ろと閉じ丸括弧の前にスペースを入れないこと。
if ( 'NG' ) { // ダメ
if ('OK') {
- 演算子 (==、&&、…) の前後にスペースを 1 つ入れること。
if ( ('NG'||'NG') &&'NG') { // ダメ
if (('OK' || 'OK') && 'OK') {
- 制御構文 (if、else、for、while、…) の開き丸括弧の前にスペースを 1 つ入れること。
while(true) { if('NG'){ for (;;){ break; } echo 'だーめ'; } break; }
while (true) { if ('OK') { for (;;) { break; } echo 'こんなもん'; } break; }
- return 文の前には空行を入れること。
function myFunc() { ... return; // 何らかの構文に続けて書かない
function myFunc() { if ('OK') { return; // 制御構文のすぐ後に return するときは要らない } ... return; // 見やすいように空行を 1 つ入れる
- 行末にスペースを入れないこと。
if ('NG') { echo '行末にスペース入ってる';
if ('OK') { echo '行末にスペース入れてない';
- 制御構造のボディを明らかにするため、文の数に関係なく波括弧を用いること。
if ('NG') echo '1 つだけだと'; else echo '省略されがち';
if ('OK') { echo '1 つでも'; } else { echo '省略しない'; }
- クラス、メソッド、および関数宣言に関する波括弧は単独の行に置くこと。
class MyClass { public function getData() { return 'NG'; } }
class MyClass { public function getData() { return 'OK'; } }
- 条件文と開き波括弧の間にスペースを 1 つ入れ、空行は入れないこと。
if ('NG'){ echo 'ダメ'; } elseif ('NG') { ... }
if ('OK') { echo 'K&R方式'; } elseif ('OK') { ... }
- クラス、メソッド、プロパティにアクセス修飾子を宣言すること (var の使用は禁止です)。
// PHP4 のような書き方はダメ class MyClass { var $state; function getState() { return $state; } }
// PHP5 で! class MyClass { public $state; public function getState() { return $state; } }
- PHP のネイティブ型定数 (false, true, null) は小文字を用いること。同じく array() に対しても小文字にすること。
if (TRUE) { $arr = Array();
if (true) { $arr = array();
- 定数は大文字を用い、単語間の区切りにアンダースコアを使うこと。
class MyClass { const Test_Value = 'NG';
class MyClass { const TEST_VALUE = 'OK';
- 1 ファイルごとに 1 クラスを定義すること。
class MyClass1 { ... } class MyClass2 { ... } // 同じファイル内に複数のクラス定義が存在してはダメ // MyClass1 と MyClass2 とでファイルをわける
- メソッドの前にクラスプロパティを宣言すること。
class MyClass { public function getData() ... public $ng; // メソッドの宣言が始まる前のところに持っていく }
class MyClass { public $ok; public function getData() ... }
- 最初に public メソッドを、次に protected メソッドを、最後に private メソッドを宣言すること。
class MyClass { protected function proFunc() { } private function priFunc() { } public function pubFunc() { } // 順番が守られていないっ! // public たち → protected たち → private たちのような流れを汲むべし
class MyClass { public function pubFunc() { } protected function proFunc() { } private function priFunc() { }
命名規則
- 変数、関数、およびメソッド名にはアンダースコアを使用しないで、camelCase を用いること。
class MyClass { public $left_number; public $RightNumber; public function Add() // ごちゃまぜ状態
class MyClass { public $leftNumber; public $rightNumber; public function add()
- オプション、引数、パラメータ名にはアンダースコアを用いること。
- すべてのクラスに名前空間を用いること。
<?php class MyClass {
<?php namespace Symfony\MySample; class MyClass {
- トップレベルの名前空間に Symfony を用いること。
namespace Ore\MySample;
namespace Symfony\MySample;
- インタフェースの接尾語に Interface を入れること。
interface Output
interface OutputInterface
- ファイル名に関しては英数字およびアンダースコアを用いること。
OutputInterface.php
ドキュメント
- クラス、メソッド、関数のすべてに PHPDoc ブロックを入れること。
class MyClass { public function get($name) { if (isset($name)) { throw new \Exception(); } return $name; }
/** * 説明用. * * @author valerian */ class MyClass { /** * 値を取得する. * * @param string $name 名前 * * @return string 名前を返す * * @throws \Exception 名前が渡されていない場合 */ public function get($name) { if (isset($name)) { throw new \Exception(); } return $name; }
- @package と @subpackage アノテーションは使いません。
/** * 説明用. * * @package Symfony * @subpackage MySample * @author valerian */
/** * 説明用. * * @author valerian */
訳注:
■命名規則には主に次のような書き方があります。
詳細はja.Wikipediaの字下げスタイルで確認してください。
■命名規則には主に次のような書き方があります。
- Pascal形式
- 先頭を大文字ではじめ、その後は小文字。単語の切れ目は大文字。例:CreateSimpleWindow
- camel形式
- 先頭を小文字ではじめ、その後は小文字。単語の切れ目は大文字。例:createSimpleWindow
- アンダースコア区切り
- 例:create_simple_window、CREATE_SIMPLE_WINDOW
詳細はja.Wikipediaの字下げスタイルで確認してください。
// L&R式 if (a < b) { return a; } else { return b; }
// Microsoft式 if (a < b) { return a; } else { return b; }
// GNU式 if (a < b) { return a; } else { return b; }
直訳調だとだいぶ意味が伝わりにくいですね…。なので、例を追加することで逃げました
翻訳元:
Fixed google-friendly name (Symfony to Symfony2) - 2010-10-18 06:23:22
https://github.com/symfony/symfony-docs/blob/master/contributing/code/standards.rst
翻訳元:
Fixed google-friendly name (Symfony to Symfony2) - 2010-10-18 06:23:22
https://github.com/symfony/symfony-docs/blob/master/contributing/code/standards.rst
0 コメント:
コメントを投稿