
一、規範前書き編
標準化とは特別な個人スタイルではなく、プログラマーがあらゆるコードを理解し、プログラムの状況を把握できるようにするものである。新人はすぐに環境に慣れることができ、PHPを新しく始めた人が同じ過ちを繰り返すのを防ぐ。一貫した開発環境では、人々が過ちを犯す機会を減らすことができる。本規範の標準は、ほとんどのアプリケーションにおいてJava技術体系に倣っている。Java技術体系は多くの成功事例により、ほとんどのコンピュータアプリケーション層の業界標準となっているからである。さらに、将来的に会社がJava技術体系へ移行しやすくなる。
二、命名定義編
ローカル変数の命名
英語の名詞・動詞を使用し、大文字を単語の区切りとし、その他の文字はすべて小文字を使用する。単語の最初の文字は小文字を使用し、アンダースコアは使用しない。例:
$repeatCount = ''; $delUserSql = '';
グローバル定数の命名
英語の名詞・動詞を使用し、すべての文字を大文字にする。各単語をアンダースコアで区切る。例:
define( 'WEBSITE_NAME', '名称' ); define( 'WEBSITE_URL', '地址' )
配列変数の命名
英語の名詞・動詞を使用し、大文字を単語の区切りとし、その他の文字はすべて小文字を使用する。単語の最初の文字は小文字を使用し、アンダースコアは使用せず、文字列「Array」を接尾辞とする。例:
$scopeArray = array(); $bookIdArray = array();
静的変数の命名
英語の名詞・動詞を使用し、大文字を単語の区切りとし、その他の文字はすべて小文字を使用する。単語の最初の文字は小文字を使用し、アンダースコアは使用せず、文字列「Static」を接尾辞とする。例:
function getDirectoryFile()
{
static $fileArrayStatic = '';
static $fileNumStatic = '';
...
}
オブジェクト変数の命名
クラス名を変数のプレフィックスとして使用し、すべての文字を大文字にし、文字列「_OBJECT」を接尾辞とする。例:
$USERACCOUNT_OBJECT = new UserAccount(); $PAINTINGORDER_OBJECT = new PaintingOrder();
クラスの命名
英語の名詞を使用し、大文字を単語の区切りとし、その他の文字はすべて小文字を使用する。名詞の最初の文字は大文字を使用し、アンダースコアは使用しない。例:
class UserAccount
{
...
}
class PaintingOrder
{
...
}
メソッドの命名
英語の名詞・動詞を使用し、大文字を単語の区切りとし、その他の文字はすべて小文字を使用する。単語の最初の文字は小文字を使用し、アンダースコアは使用しない。例:
class UserAccount
{
function isAccountOk()
{
...
}
function addAccount()
{
...
}
}
メソッド内のパラメータの命名
英語の名詞・動詞を使用し、大文字を単語の区切りとし、その他の文字はすべて小文字を使用する。単語の最初の文字は小文字を使用し、アンダースコアは使用しない。例:
class UserAccount
{
function isAccountOk( $accountName )
{
$this->accountName = $accountName;
...
}
function addAccount( $inputDataArray )
{
$this->inputArray = $inputDataArray;
...
}
var $accuntName = '';
var $inputArray = '';
}
クラス属性の命名
英語の名詞・動詞を使用し、大文字を単語の区切りとし、その他の文字はすべて小文字を使用し、単語の最初の文字は。
大文字を使用し、アンダースコアは使用しない。クラス属性が何らかのオブジェクト変数である場合は、文字列「Object」を接尾辞とする。例:
class UserAccount
{
function IsAccountOk()
{
...
}
function AddAccount()
{
...
}
var $tableName = '';
var $databaseObject = '';
}
三、構文記述編
中括弧{}の規則
中括弧をキーワードの下の同じ列に配置する。例:
if ( $condition )
{
...
}
この方式は使用しない:
if ( $condition )
{
...
}
コードインデントの規則
タブ文字(TABキー)またはスペース4つでインデントする。インデントの階層が4より大きい場合は、そのビジネスロジックのアルゴリズムを再設計してください。
丸括弧()の規則
丸括弧をキーワード、メソッド名、メソッドのパラメータに密着させないでください。1つのスペースで区切ること。例:
if ( $condition )
{
...
}
function addAccount( $inputDataArray )
{
...
}
丸括弧がキーワードなどに密着していると一体として見なされやすいため、以下の方式は使用しないでください。例:
if ($condition)
{
...
}
function addAccount($inputDataArray)
{
...
}
if .. else ... の規則
通常、未処理または未知のその他のケースを処理するためにelseブロックを用意するのが最善です。条件処理ステートメントが1つだけの場合でも中括弧{}を使用しなければなりません。例:
if ( $condition1 )
{
...
}
else if ( $condition2 )
{
...
}
else
{
...
}
以下の使用方式はできるだけ避けてください。例:
if ( $condition1 ) ... else ...
switchの規則
各caseブロックの終わりには必ずbreakを付けなければならず、未知のケースを処理するためにdefaultが常に存在するべきです。例:
switch( $condition )
{
case $value1:
...
break;
case $value2:
...
break;
default:
...
break;
}
宣言配置の規則
宣言コードブロックは整列させる必要があり、変数を初めて使用するときは初期化する必要があります。例:
var $tableName = ''; var $databaseObject = '';
以下の方式は使用しない。例:
var $tableName; var $accuntName = ''; var $databaseObject = '';
四、その他の説明編
すべてのクラスメソッドは戻り値を持たなければならない。結果が単純でtrueまたはfalseを返す場合を除き、他のメソッドは異なる値を返すべきである。
さらなる処理のためフローに引き渡す。
HTMLのformフォームでは、submitボタンのname属性を一律に設定しないこと。
HTMLのformフォームの各要素の名前はデータベースのフィールドと一致させること。
1行に1つの文にすること。
非ゼロ値をデフォルトの方法でテストしないでください。明示的にテストする必要があります。例:
if ( false != $this->IsAccountOk() )
{
...
}
else
{
...
}
以下の方式は使用しないでください。例:
if ( $this->IsAccountOk() )
{
...
}
else
{
...
}
三項演算子 ? : を使用しないでください。ただし、変数への代入は除きます。例:
$_GET['act'] = !empty( $_GET['act'] ) ? $_GET['act'] : 'v_login';
統一して <?php ?> を使用し、<? ?> 形式の使用は禁止します。
get、post、sessionタイプの変数については、$_GET、$_POST、$_SESSIONの方式で定義および呼び出しを行う必要があります。
可能な限り二重引用符ではなく単一引用符''を使用すること。
使用が終わった配列変数、オブジェクト変数、クエリ結果セットは、すぐにunset()、free_result()を使用してリソースを解放しなければならない。
1つのPHPファイルには1つのクラス定義コードのみを含めることができ、クラス名をファイル名とすること。
PHPファイル内にHTMLステートメントを絶対に記述してはならない。HTMLファイル内ではPHPステートメントをできるだけ避けること。
HTMLファイルはW3CのHTML4検証認証(http://validator.w3.org/)に合格しなければならない。
プログラム内の命名が対応する物事とわずかしか一致しないことに気づいた場合は、システムを再設計してください。
クラスに名前を付ける前に、まずそれが何であるかを知る必要がある。クラス名から得られる手がかりによっても、そのクラスが何であるかを思い出せないなら、設計は十分ではない。
3つの単語を超える混合名は、システム内の各エンティティ間に混乱を引き起こしやすいため、クラスを再設計してください。
通常、各メソッドは1つの論理動作トランザクションのみを実行する。そのため、それらの命名は何をするのかを明確に説明すべきである。errorCheck()の代わりにcheckForErrors()を用い、dataFile()の代わりにdumpDataToFile()を用いる。
これにより、機能とデータがより区別しやすいものになる。
五、プログラムコメント編
クラスのコメント
/*
* Purpose:
* 作为通用接口访问数据库的类
* Class Name:
* Database
* Author:
* unixdotnetphpboke@163.com
* Modifications:
* 2004-08-18 09:15
* 添加db_insert_id()方法
* unixdotnetphpboke@163.com
* See: 参照说明
*/
class Database
{
……
}
クラスメソッドのコメント
/*
* Purpose:
* 取得上一步数据库insert操作产生的id
* Method Name:
* getInsertId()
* Parameter:
* Return:
* int
* Author:
* unixdotnet phpboke@163.com
* Modifications:
* 2004-08-18 09:15
* 修改原因
* unixdotnet phpboke@163.com
* See: 参照说明
*/
function getInsertId()
{
...
}
クラス属性のコメント
class Database
{
/*
* Purpose:
* 连接数据库所需的用户名
* Attribute Name:
* $databaseUserName
* Type: string
* Author:
* unixdotnet phpboke@163.com
* Modifications:
* 2004-08-18 09:15
* 修改原因
* unixdotnet phpboke@163.com
* See: 参照说明
*/
var $databaseUserName;
...
}
六、データベース応用編
データベースの設計は、3つの正規形に準拠しなければならない(極端に高速な処理が要求される場合、記録テーブルを別途設けることを考慮する場合は除く)。
データベース名は、プロジェクトの内容を概説する小文字の英語名詞で構成する必要がある。
データテーブル名は、オブジェクト名の小文字の英語名詞で構成する必要があります(可能な限りシステム内のビジネスクラス名に対応させること)。
単語はアンダースコアで区切り、クロスプラットフォーム時に発生する可能性のある大文字小文字のエラーを避けること。
データテーブルのフィールドは、varchar、textなどの可変長タイプを避けるべきです。時間情報のフィールドはUNIX timestampタイプで保存します。
データをクエリする際、* ワイルドカードの使用を禁止し、リソースの占有を避けて処理速度を向上させる。一時テーブルの使用はできるだけ避けること。
複数テーブルを接続してデータをクエリする場合、各リソースはフルネーム、すなわちtableName.fieldNameを使用し、fieldNameのようにはしないこと。
SQL文は可能な限りANSI92標準に準拠し、特定のデータベースによるSQL言語の拡張機能の使用を避けること。
開発終了後、SQLクエリ文の条件文部分(WHERE)に対してインデックスを追加しなければならない。複数の条件に一致する必要がある場合は、複合インデックスを使用すべきである。
インデックスの構成は、左から右へ条件文の順序に一致させる必要がある。
盲目的にインデックスを追加することは厳禁であり、データ挿入速度の低下、占有スペースの増加、クエリ速度の低下を避けること。
データベース(テーブル)に構造的な変更が発生するたびに、登録・保存しなければならない。日常的に、定期的に(3営業日以内に)データベース構造とそのデータをバックアップすること。
1. PHP変数に文字列を代入するときは、できるだけ単一引用符を使用する。単一引用符は速度がかなり速い。
2. PHP変数に代入するとき、値の中に変数が含まれる場合は、二重引用符を使用する必要がある。二重引用符は変数を自動解析できるため、とても便利である。
例えば、$b=blue; $a="php$b"; echo $a; は phpblue を出力します(単一引用符と二重引用符にはそれぞれ利点があります)。
3. HTML内ではできるだけ二重引用符を使用してください。長さに関わらず、PHPで使用する場合は先頭と末尾に単一引用符を付け加えるだけでよいので、間違いを心配する必要はありません。
出典:http://www.phpboke.com/php-standard.html