日本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 コメント:
コメントを投稿