PHP コーディング標準
コードをより読みやすく、保守しやすくし、コメントの記述を減らすために、標準化された名前付けとコード記述を通じて「ドキュメントとしてのコード」を実現したいと考えています。 目的。 Yigao 電子商取引システムのすべての PHP ファイルは、ドキュメントで指定されているコーディング規約に従う必要があります。同時に、SVN のサーバー側で仕様チェックを追加しました。提出されたコード内に仕様に準拠していないコードがあった場合、SVN はエラー メッセージを返します。気をつけてください SVN エラー メッセージを読みます。メッセージには、仕様を満たしていない詳細なエラー ファイル、行番号、説明が含まれています。
サードパーティのクラス ライブラリについては、必要に応じてプロジェクト マネージャーに問い合わせてください。
変数名はキャメルケースで名前付けされ、最初の文字は小文字、後続の単語の最初の文字は大文字になります。例:
$currentUser は正しいですが、$currentuser
と $current_user
それは正しくありません。
$requestUrl は正しいですが、$requestURL
それは正しくありません。
名前は説明的かつ簡潔である必要があります。もちろん、変数名として長い文を使用することは望ましくありませんが、変数が何に使われるかを考えるよりも、もう少し多くの文字を入力する方が良いでしょう。
定数名は、ORDER_TYPE のように、すべて大文字とアンダースコア (_) で構成されます。
単一文字の変数名が許可される唯一の状況は、ループ カウンタとして使用される場合です。この場合、外側のループのカウンターは常に次のようにする必要があります。 $i。このループ内にループがある場合、そのカウンターは $j になるはずです。 kドルなどループのカウンターが意味のある名前を持つ既存の変数である場合、この仕様は適用されません。
for ($i = 0; $i < $outerSize; $i++) { for ($j = 0; $j < $innerSize; $j++) { foo($i, $j); } }
関数にはわかりやすい名前を付ける必要があります。ここでは C でプログラミングしているわけではありませんし、「stristr()」のような関数を書きたくありません。上記と同様に、単語はキャメルケースを使用して区別されます。関数名のどこかに動詞を含めた方がよいでしょう。より適切な関数名は、printLoginStatus()、getUserData() などです。
関数パラメータ
パラメータは変数名と同じ規則に従います。 doStuff($a, $b, $c) のような大量の関数は必要ありません。ほとんどの場合、関数の宣言を見るだけで関数の使用方法がわかります。パラメータの数は 5 つのパラメータ以内で制御する必要があります。配列を使用して 5 つを超えるパラメータを渡すこともできます。
ここでの基本的な哲学は、単に怠惰にするためにコードの明瞭さを犠牲にしないことです。ただし、このバランスをとるには、いくつかの常識を使用する必要があります。 たとえば、printLoginStatusForAGivenUser() は行き過ぎです。この関数の名前は printUserLoginStatus() です。 あるいは、単に printLoginStatus() を使用することもできます。
テンプレート ファイルとサードパーティの PHP プログラムを除き、すべての PHP ファイル ヘッダーには、ファイルの目的やその他の情報を説明する標準ファイル ヘッダーが含まれている必要があります。例:
<?php /** * 这里是该文件的描述,说明这个文件的作用 * * $Id$ * * @copyright Xingchangxinda Inc., all rights reserved. * @package Framework * @todo system entrance * @author Weber Liu */ ?>?
著作権およびその他のタグについては、PHP ドキュメントを参照してください。 の説明。
一般的なコメントの書き方に従って、コードセグメントのコメントは次の方法で記述する必要があります:
ブロックレベルのコメント:
この種のコメントは、以下の複数行の目的を説明するために使用されます。一般に、空白行は次のように記述されます。
/* 这里是注释的内容 */ /** * 如果注释的内容比较多 * 请用这种方式来写 */?
インラインコメント:
この種のコメントは、変更されたコードを説明するために使用されます。一般に、コメントとコードは次のように同じ行に置かれます。
$userInfo = $user->getInfo(); // 获得用户的详细资料?
です。 、ステートメントがどんなに短くても、必ず中括弧を使用してください。例: ?
中括弧の位置について:/* 这些是对的 */ if (condition) { doStuff(); } while (condition) { doStuff(); } for ($i = 0; $i < size; $i++) { doStuff(); }
。例:
这是不用太费事就可以保持代码可读性的另一个简单,容易的步骤。
无论何时你写一个赋值,表达式,等等,始终在符号之间保留一个空格。基本上,把代码当作英语来写。在变量名和运算符之间插入空格。不要在起始括弧后或者终
止括弧前加空格。不要在逗号或者分号之前加空格。一些例子很好地展示了这一点。例如: 你知道 PHP 中所有运算符的详细的优先级吗?我不知道。不要猜。始终用括号强制一个表达式的优先级可以使优先级明显,这样你知道它会做些什么。例如: 当条件语句中的条件存在多个,并且有变量值的判断的时候,需要把变量的判断语句放在其他的条件语句之前。 虽然在 PHP 中else if 和 elseif 的作用基本上是一样的。但是为了代码的统一性(也有传言 else if 会出现不稳定的情况),我们要求将 elseif 之间不保留空格: 上面的代码中,我用到了 在这里我们不强行要求这种写法,但是还是强烈建议: 在写等于的逻辑判断时将常量放在等号的左侧
。 为了使代码看起来简短一点,对于下面的这种简单的if语句允许采用一种简写的方式:class MyClass {
public function foo() {
if (cond) {
doSomething();
}
}
}?
符号前后使用空格
/* 每一对给出了错误方式,紧跟正确方式。 */
$i=0;
$i = 0;
if($i<7) ...
if ($i < 7) ...
if ( ($i < 7)&&($j > 8) ) ...
if (($i < 7) && ($j > 8)) ...
do_stuff( $i, "foo", $b );
do_stuff($i, "foo", $b);
for($i=0; $i<$size; $i++) ...
for($i = 0; $i < $size; $i++) ...
$i=($j < $size)?0:1;
$i = ($j < $size) ? 0 : 1;?
运算符优先级
/* 结果是什么?谁知道? */
$bool = ($i < 7 && $j > 8 || $k == 4);
/* 现在你确定这里我在做什么了。 */
$bool = (($i < 7) && (($j < 8) || ($k == 4)))?
数据库命名规范
其他规范
if 以及else if的写法
/* 正确的写法 */
if (1 === $val && function_exists(‘ob_gzhandler’)) {
... ...
}
/* 错误的写法 */
if (function_exists(‘ob_gzhandler’) && 1 === $val) {
}
if (2 == $n) {
... ...
} elseif (1 == $n) {
... ...
}
1 === $n
这样的写法,而没有采用常见的 $n === 1
写法的,这么做目的是为了避免我们在写双等号时错误的写成了一个等号,而 PHP 并不会报错,这样会造成在调试过程中浪费更多的时间。if 语句的简写方式
// 通常的写法
if ($a == $b) {
$c = 'foo';
}
// 简写的方式
$a == $b && $c = 'foo';