EC-CUBE標準規約
基本的に Zend Framework PHP 標準コーディング規約 に順ずる.
以下, 要点及び相違点を規定する.
また, コーディングに際して, 以下のガイドラインに沿うことが望ましい
EC-CUBE標準規約/リファクタリングガイドライン
命名規約
ファイル名
- 拡張子は, 各ファイル形式に準ずる.
- PHPクラスは, 特別な場合を除き, 1クラス1ファイルとし, クラス名.php とする.
PHPクラス名
- 区切り文字としてはアンダースコア(_)を使用する.
- クラス名称の先頭には, 大文字でその種類を表す Prefix を付加する.
Prefix | 種類 | 例
|
SC, GC | 1つのサイト内で共有するクラス (他のクラスから呼ばれる) | SC_Customer.php
|
LC | 1つのソースファイル内で使用するクラス (通常他のクラスから呼ばれない) | LC_Page_Abouts.php
|
- クラスがパッケージに属する場合は, Prefix の後にパッケージ名を付加する.
- Page パッケージでインデックスページとしてアクセスされるクラス名は Index とせず, 属する階層名をクラス名とする.
- ユーザーが拡張するために extends するクラスは, クラス名の最後に Ex を付加する.
関数名
- 関数名の先頭には, 小文字でその種類を表す Prefix を付加する.
- クラス名: LC_*
- private または protected を意図する場合、Prefix「lf」を省略できる。(Prefix の付加がない場合、「lf」相当とみなす。)
- public を意図する場合、Prefix「sf」を省略できない。
- クラス名: SC_*, GC_*
- public を意図するメソッドの場合、Prefix「sf」を省略できる。(Prefix の付加がない場合、「sf」相当とみなす。)
- private または protected を意図する場合、Prefix「lf」を省略できない。
- 名称が複数の単語からなる場合, それぞれの単語の先頭を大文字にする.
- 関数名は, Prefix + 動詞 + 対象 を原則とする.
Prefix | 種類 | 例
|
sf | 一つのサイト内で共有する関数 | sfGetProductName()
|
lf | 一つのソースファイル内で使用する関数 | lfGetProductName()
|
fn | JavaScript で宣言された関数 | fnGetProductName()
|
変数名(Smarty 変数も含む)
- 変数名の先頭には, 小文字でその種類を表す Prefix を付加する.
- ループ等で一時的に使用する, 数値型の変数には慣習的な $i, $j, $k を使用しても良い.
- リテラルを格納する (つまり配列・オブジェクト以外の) 変数名は, すべて小文字を使用し, アンダーバーで区切る.
- 配列・オブジェクトの変数名はキャメルケースを使用する.
Prefix | 種類 | 例
|
obj | クラス変数(オブジェクト) | $objQuery
|
arr | 配列 | $arrCustmers
|
tpl | テンプレート変数(リテラル) | $this->tpl_csv_id
|
定数名
- すべて大文字で宣言する.
- 区切り文字としてアンダースコア(_)を使用する.
- パスに関わるもの(パラメータを含む)は、下記を適用する。(#834 から展開)
- *_URL: URL
- *_URLPATH: URL における url-path 相当 (絶対パス)
- *_HTMLPATH: URL 上の EC-CUBE の /html/ からの相対パス
- 先頭に「/」を含まない。(/html/ と同一の場合、空文字)
- 命名に改善余地あり。 (参考: concrete5=DIR_REL) 現在は利用箇所が無いが、今後利用する必要も考えられるので再考していきたい。
- *_REALFILE: (サーバの)ファイルシステム上のファイルの絶対パス
- *_REALDIR: (サーバの)ファイルシステム上のディレクトリの絶対パス
- *_DIR: 上記に該当しない断片的なディレクトリ情報。
- *_FILE: 上記に該当しない断片的なファイル情報。
- *_PATH: 上記に該当しないもの。上記の複数に該当するもの。
DBテーブル名
- テーブル名の先頭には, 小文字でその種類を表す Prefix を付加する.
- 区切り文字としてアンダースコア(_)を使用する.
Prefix | 種類 | 例
|
mtb | マスタデータ | mtb_pref
|
dtb | データテーブル | dtb_order_detail
|
DBカラム名
- 特に指定の無い限り, すべて小文字を使用する.
- 区切り文字としてアンダースコア(_)を使用する.
CSS クラス名
コーディング規約
HTML
- ラジオボタン, チェックボックスは <label></label> で囲み, 文字をクリックしてもチェックされるようにする.
PHPコード
- 改行コードは, 基本的に LF を使用する.
- 使用する Subversion クライアントによっては, svn add を実行した際に, OS 元来の改行コードがリポジトリに反映されてしまう場合があるため, svn propset で svn:eol-style=LF を設定しておくのが望ましい.
- PHPコードの開始タグと, 終了タグは以下のように記述する.
- 終了タグの後に必ず LF (UNIX の改行コード)を1つ入れる.
- 余分な空行, 行末の空白は極力削除する.
- クラス定義, 関数定義の後, 括弧の後で改行する.
- 80 文字を目安に改行する.
<?php
class LC_Page_Abouts {
function process() {
// some logic.
}
}
制御文
- if, for, while, switch 等の制御構造は, 次のルールで開き括弧で記述する.
- インデントは, 半角スペース4文字を使用し, タブは使用しない.
- if 文
<?php
if ($flag == '1') { // '1' == $flag と書くのは NG
$ret = 1;
} elseif ($flag == '2') {
$ret = 2;
} else {
$ret = 3;
}
- for 文
<?php
for ($i = 0; $i < $max; $i++) {
echo $i . "\n";
}
- foreach 文
<?php
foreach ($var as $key => $val) {
echo $key . ':' . $val . "\n";
}
- while 文
<?php
while ($flag) {
var_dump($flag);
}
- do while 文
<?php
do {
var_dump($flag);
} while ($flag);
- switch 文
<?php
switch ($var) {
case VAR_ONE:
echo 'one';
break;
case VAR_TWO:
echo 'two';
break;
default:
echo 'default';
break;
}
文字列
- 長くなる文字列は分割し, "." で結合する.
<?php
$sql = 'SELECT name, age, birthday, zipcode, address, comment '
. ' FROM user_information '
. ' WHERE user_id = ? '
. ' AND is_delete = 0 ';
- ヒアドキュメントを使用しても良い
<?php
$sql = <<< __EOS__
SELECT name,
age,
birthday,
zipcode,
address,
comment
FROM user_information
WHERE user_id = ?
AND is_delete = 0
__EOS__;
SQL文
- フォームから入力された値を利用して SQL文を生成する場合, SQLインジェクションを防ぐため, 必ず PEAR::MDB2 のブレースホルダを利用する.
コメント
ヘッダ
- 各ファイルのヘッダに著作権表記を記述する.
<?php
/*
* This file is part of EC-CUBE
*
* Copyright(c) 2000-2011 LOCKON CO.,LTD. All Rights Reserved.
*
* http://www.lockon.co.jp/
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
クラス定義
- phpDoc コメントは必要に応じて記述する.
- @version は $Id$ を使用する.
- メンバ変数は / */ を使用することによって phpDoc コメントとして認識される.
<?php
/**
* クラスの簡単な説明
*
* クラスの詳細な説明....
* ...
*
* @package Page
* @author LOCKON CO.,LTD.
* @version $Id$
*/
class LC_Page {
/** メンバ変数 */
var foo;
}
関数定義
- phpDoc コメントは必要に応じて記述する.
- コード文中にも必要に応じて的確なコメントを記述する.
<?php
/**
* 関数の簡単な説明.
*
* 関数の詳細な説明....
* ....
*
* @access private
* @param string $foo 引数の説明
* @param string|integer $bar 引数の説明
* @return string 返り値の説明
*/
function process($foo, $bar = '') {
// some process...
return 'string value';
}
その他
- 必要に応じて, 下記のタスクタグを使用しても良い
- TODO - TODO として残したいコメント
- FIXME - 必ず修正することを促すコメント
- XXX - 動くけど怪しい...
<?php
// TODO リファクタリングすること.
// FIXME 要修正. バグの説明(#135)
/**
* :XXX: 以下, 怪しいロジック(#999)
* 複数行のコメントはこのように.
*
* 必要に応じて チケットの ID も記述する.
*/
- コメントによってソースコードが見難くならないように注意する.