PHPコーディング標準

WBOY
リリース: 2016-06-13 13:10:10
オリジナル
805 人が閲覧しました

PHP コーディング標準

コードをより読みやすく、保守しやすくし、コメントの記述を減らすために、標準化された名前付けとコード記述を通じて「ドキュメントとしてのコード」を実現したいと考えています。 目的。 Yigao 電子商取引システムのすべての PHP ファイルは、ドキュメントで指定されているコーディング規約に従う必要があります。同時に、SVN のサーバー側で仕様チェックを追加しました。提出されたコード内に仕様に準拠していないコードがあった場合、SVN はエラー メッセージを返します。気をつけてください SVN エラー メッセージを読みます。メッセージには、仕様を満たしていない詳細なエラー ファイル、行番号、説明が含まれています。

サードパーティのクラス ライブラリについては、必要に応じてプロジェクト マネージャーに問い合わせてください。

エディタ設定

  1. コードのインデント: すべてのインデントでタブの代わりにスペースが使用され、各インデントには 4 つのスペースが含まれます。
  2. ファイル エンコーディング: すべての PHP ファイルは UTF-8 として保存されます (BOM なし ) 文字エンコーディング、ANSI は使用できません。

命名規則

変数の名前付け

変数名はキャメルケースで名前付けされ、最初の文字は小文字、後続の単語の最初の文字は大文字になります。例:

$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(); // 获得用户的详细资料?
ログイン後にコピー

中括弧の位置については多くの議論があります。実際、各ステートメントにはさまざまな理由がありますが、基本的に誰もが同意していることが 1 つあります。それは、

常に中括弧を使用する

です。 、ステートメントがどんなに短くても、必ず中括弧を使用してください。例: ?

中括弧の位置について:
/* 这些是对的 */ 
  if (condition) { 
      doStuff(); 
  } 
  while (condition) { 
      doStuff(); 
  } 
  for ($i = 0; $i < size; $i++) { 
      doStuff(); 
  }
ログイン後にコピー
クラス、関数、および制御ステートメントの中括弧は常に同じ行にあります

。例:

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;?
ログイン後にコピー

运算符优先级

你知道 PHP 中所有运算符的详细的优先级吗?我不知道。不要猜。始终用括号强制一个表达式的优先级可以使优先级明显,这样你知道它会做些什么。例如:

 /* 结果是什么?谁知道? */ 
 $bool = ($i < 7 && $j > 8 || $k == 4); 
 
 /* 现在你确定这里我在做什么了。 */ 
 $bool = (($i < 7) && (($j < 8) || ($k == 4)))?
ログイン後にコピー

数据库命名规范

  • 数据库以及数据表的命名与类的命名相同,采用首字母大写的驼峰方式命名。需要注意的是: 所有数据表的名字必须是复数的写法。
  • 所有字段的名称应该是由描述性的单词组成,命名的规则和变量命名规范 保持一致。
  • 为了配合 ORM 模型,我们要求 所有的主键统一命名为 id

其他规范

if 以及else if的写法

当条件语句中的条件存在多个,并且有变量值的判断的时候,需要把变量的判断语句放在其他的条件语句之前。

 /* 正确的写法 */
 if (1 === $val && function_exists(‘ob_gzhandler’)) {
     ... ...
 }
 
 /* 错误的写法 */
 if (function_exists(‘ob_gzhandler’) && 1 === $val) {
 }
ログイン後にコピー
?

虽然在 PHP 中else if 和 elseif 的作用基本上是一样的。但是为了代码的统一性(也有传言 else if 会出现不稳定的情况),我们要求将 elseif 之间不保留空格:

 if (2 == $n) {
    ... ...
} elseif (1 == $n) {
    ... ...
}
ログイン後にコピー

上面的代码中,我用到了 1 === $n 这样的写法,而没有采用常见的 $n === 1 写法的,这么做目的是为了避免我们在写双等号时错误的写成了一个等号,而 PHP 并不会报错,这样会造成在调试过程中浪费更多的时间。

在这里我们不强行要求这种写法,但是还是强烈建议: 在写等于的逻辑判断时将常量放在等号的左侧

if 语句的简写方式

为了使代码看起来简短一点,对于下面的这种简单的if语句允许采用一种简写的方式:

 // 通常的写法
 if ($a == $b) {
     $c = 'foo';
}
 
 // 简写的方式
 $a == $b && $c = 'foo';
ログイン後にコピー
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート