転載元: PHP コーディング標準
PHP 記述仕様
著者: シンク
最終更新日: 2011-7-13
参考:
PHP マニュアル
http://www.php.net/manual/zh/ .oop5.basic.php
PEAR コーディング標準
http://pear.php.net/manual/en/standards.php
C++ コーディング標準
http://www.possibility.com/Cpp/CppCodingStandard.html
Google C++ スタイル ガイド
http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml
Java のコード規則
http://www.oracle.com/technetwork/java/codeconvtoc-136057.html
仕様を策定する際は、次の点に注意してください。
1. 一般に、両方が許容される状況は存在しません。
たとえば、タブと 4 つのスペースは両方とも機能しますが、結果は混乱を招くコードになります。
一般原則:
1. 意味論
名前を見れば、意味がわかります。
2. 共通接頭辞
はかどうかを意味し、get は読み取りを意味し、set は書き込みを意味します。 is の後には名詞ではなく形容詞が続きます。たとえば、テキストが多言語の場合は、is_multi language の代わりに is_multilingual を使用する必要があります。
3. 単数と複数
js の関数命名規則: getElementById、getElementsByTagName、getElementsByName を参照してください。
例:
複数の友人の名前を取得するには、getFriendNames または getFriendName の代わりに getFriendsName を使用する必要があります
ユーザーを取得するには、getUser です
複数のユーザーを取得するには、getUsers です
4. 冗長サフィックス
試してください特別な状況が適用されない限り、データ、リスト、および情報の接尾辞を使用しないでください。
たとえば、js の名前付けに注意して、getElementsInfoByTagName の代わりに getElementsByTagName を使用してください。
getFriendsList の代わりに getFriends または getFriendsUserId を使用する必要があります。getUserInfo または getUserData の代わりに getUser を使用する必要があります。
しかし、場合によってはそれを避けるのが難しい場合があります。たとえば、ユーザーの基本情報を取得する機能と、ユーザーの詳細情報を取得する機能があります。
基本的なユーザー情報を取得します: ニックネーム、アバター URI、関数名 getUserBasic または getUserBasicInfo?形容詞で終わる関数名は不適切であると感じられます。話し合います。議論の結果: getUserBasicInfo が適しています。
ユーザーの詳細を取得します: ニックネーム、アバター URI、署名、誕生日、関数名 getUser は問題ありません。
5. あいまいなクラス名、ファイル名、ディレクトリ名
common、util、functions、class、object、basic などをファイル名として使用するときは注意してください。発展すればするほどゴミ箱になってしまいます。たとえば、文字列処理を行うクラスには StringLib.php という名前を付け、lib ディレクトリに配置します。
6. ライブラリ、プラグイン、アドオンの違い
一部のクラスと関数は、ライブラリ、プラグイン、またはアドオンとしてカウントされます。話し合います。議論の結果:現状の拡張機能はLibであり、プラグインやアドオンについては今後検討する。
7. よく使われる語彙
URL ではなく URI を使用することを優先します。より厳密になったため、新しい命名には URI が使用されるようになりました。たとえば、js の encodeURI、PHP の $_SERVER['REQUEST_URI'] などです。
期限と TTL: 期限は最後の瞬間を表し、TTL は生存時間を表します。たとえば、現在時刻が 1310449710 で TTL が 60 秒の場合、期限は 1310449710 + 60 = 1310449770 となります。
クラス名:
大文字で始め、キャメルケースを使用してください。通常は、ParseConfig の代わりに構成解析クラス ConfigParser などの名詞を使用します。
Java および C++ と一貫性があります。
例: class UserModel
クラスのファイル名:
クラス名と同じ。これは php の自動ロードに関連しており、自動ロードするにはクラス名が常に非常に長い必要があります。話し合います。議論の結果:自動クラスローディングはキャメルケースに準拠することによっても実現できます。
Javaと一貫性があります。
例: UserModel クラスのファイル名は UserModel.php です
クラス以外のファイル名:
すべて小文字で、アンダースコアで区切られ、スペースは許可されません。たとえば、get_user.php。
ディレクトリ名:
すべて小文字、アンダースコアで区切られ、スペースは許可されません。モデルさんとかwww
関数名:
小文字で始め、キャメルケースを使用します (例: function addBlog())。
Java および C++ と一貫性があります。
関数は関数、つまりアクションを表すため、動詞が優先されます。たとえば、blogEdit の代わりに editBlog を使用します。
歴史的な理由により、PHP 組み込み関数には do_something、something_do、dosomething などの多くのスタイルがあります。新しい関数は、現在の主流言語との一貫性を保つために doSomething を使用します。
例: paser_str、json_encode、substr、fetchAll。
歴史的な理由は変更できないかもしれませんが、新しいコードが厳格であることを保証し、歴史的な理由にならないようにすることはできます。
クラス内の関数:
2 つの関数の間には空の行を残します。時間があれば、混乱を避けるために各関数を英語のアルファベット順に並べ替えてください。
例:
class BlogModel
{
public function addBlog()
{
}
public function updateBlog()
{
}
}
ファイルのコメント:
コメントは 形式は PHPdoc の要件に従います: http://manual.phpdoc.org/HTMLframesConverter/default/phpDocumentor/tutorial_tags.author.pkg.html
/**
* ブログの各種業務:追加、更新
* @author シンク
*
*/
class BlogModel
{
}
?>
API の注意事項:
入力パラメータと出力形式を必ず記述してください。正しい場合に何が出力され、間違っている場合に何が出力されるかを明確に書きます。
そうしないと、他の人はそれを使用できません。
関数のコメント:
出力形式を必ず記述してください。正しい場合に何が出力され、間違っている場合に何が出力されるかを明確に書きます。
入力パラメータが複雑で配列が含まれており、パラメータが一目で明確に理解できない場合は、入力パラメータにコメントを記述する必要があります。
ドキュメントのコメントと関数の間に空白行を含めることはできません。
関数の内部手順が複雑な場合は、「インラインコメント」を記述する必要があります。
例:
/**
* ブログを更新します
* @param int $id blog_id
* @param array $data array(
"content" => "", //Content
"tags" => "", //Tag
"update_time " => "", //更新時間
)
* @return bool
*/
public function updateBlog($id,$data)
{
step1 //最初のステップ: asdf
step2 //2 番目のステップ: qwer
}
URI:
rfc1034 国際標準によれば、ドメイン名ではアンダースコア「_」は禁止されており、ドメイン名では大文字と小文字が区別されません。
たとえば、http://dl_dir.qq.com/ は間違ったドメイン名です。
http://example.com は http://EXAMPLE.COM と同じです。
したがって、URI にはすべて小文字を使用することが望ましく、GET の名前は GET の値を除いて小文字になります。
たとえば、
http://www.google.com/?hl=zh-CN
http://www.google.com/?hl=zh-cn
URI 内の非パラメータ固有名詞の略語を使用するかどうか小文字であること、物議を醸しており、決定的ではないこと。
例:
http://fedoraproject.org/zh_CN/
http://zh.wikipedia.org/zh-cn/
http://code.google.com/intl/zh-CN/
http:/ / www.microsoft.com/en-us/
言語コードは固有名詞であり、ISO ではマイナス記号であることが規定されており、地域内では大文字を使用することが推奨されています。
Fedora の使用法は非常に奇妙で、zh-CN の代わりに独自の zh_CN を使用します。また、URI でアンダースコアを使用することはお勧めできません。
Wiki は小文字を使用し、Google は大文字を使用し、Microsoft は小文字を使用します。
GET の名前を除き、URI にはアンダースコアの代わりにマイナス記号「-」を使用することをお勧めします。
たとえば、
http://example.com/1-2-2
http://example.com/?user_id=123
ユーザーに URI を手動で入力してもらいたい場合は、大文字と小文字を区別せずに次のようにします。ユーザー入力の方が便利なので、小文字から始めます。
実際の状況は次のとおりです。URI は非常に長いため、ユーザーは通常、URI の代わりにドメイン名を手動で入力します。この場合、URI を小文字にするのは意味がありますか? http://example.com/?userId=123 を使用する場合、変数名にはキャメルケース $userId = $_GET['userId'] を使用できます。 Java、C++ との比較 一貫性を保つために、データベースの名前もキャメルケースで付ける必要があります。話し合います。議論の結果: ?user_id=123 を使用します。
変数:
すべて小文字で、アンダースコアで区切られます。例: $user_id。
Java および C++ と矛盾します。ディスカッションの結果: $user_id を使用します。
クラスのメンバー変数、関数の仮パラメータ、およびオブジェクトへのクラスのインスタンス化はすべて、変数の命名規則に従います。
理由: URI とデータベースには小文字の規則があるため、パラメーターは $_GET と $_POST から取得され、データベースに保存されるため、小文字を使用します。
PHP 組み込み変数 $_GET と $_POST はアンダースコアで始まり、すべて大文字で始まります。カスタム変数がどれほど重要であっても、将来の組み込み変数との競合を避けるために、カスタム変数をアンダースコアで始めないでください。
例: $_PUT、$_DELETE は使用しないでください。
定数:
すべて大文字、アンダースコアで区切られます。例: const MEMCACHE_TTL = 600;
PHP 短いタグ:
を使用し、短いタグ > は使用しないでください。これは XML と競合し、デプロイメントに役立たないためです。
中括弧のような行の折り返し:
中括弧を使用して行を単独で占有することも、他の行と同じ行に中括弧を配置することもできます。これについては議論の余地があり、まだ議論されていません。議論の結果:「ピア」を使用します。
class UserModel {
}
サポートラインラッパー:
http://www.php.net/manual/zh/ language.oop5.basic.php
http://pear.php.net/manual/en/standards .classdef.php
関数中括弧のラッピング:
これは議論の余地があり、まだ議論されていません。議論の結果:「ピア」を使用します。
function getUser() {
}
改行をサポートします:
http://www.php.net/manual/zh/ language.oop5.basic.php
http://pear.php.net/manual/en/standards.funcdef.php
中括弧で囲む場合:
Yesこの論争は依然として議論の余地がある。議論の結果:「ピア」を使用します。
例:
if(!empty($name))
{
}
または
if(!empty($name)) { //OK
}
サポート行ラッパー:
http://www.可能性 .com/Cpp/CppCodingStandard.html#brace
他の旅行者をサポート:
http://www.php.net/manual/zh/ language.oop5.basic.php
http://pear.php.net/ Manual /en/standards.control.php
ラップする中かっこを切り替えます:
ディスカッションの結果: 「ピア」を使用します。
switch (...) {
case 1:
... Break;
デフォルト:
}
サポート改行:
http://www.possibility.com/Cpp/CppCodingStandard.html#switch
配列括弧で囲む:
これは物議を醸しており、決定的ではありません。議論の結果:「ピア」を使用します。
$user = array(
"id" => "123",
"name" => "user1",
"email" => "a@example.com",
)
サポートコンパニオン:
http ://pear.php.net/manual/en/standards.arrays.php
配列の内部行折り返し:
2 次元以上の配列の内部行折り返し。
たとえば、
$user = array(
'id' => '123',
'name' => 'user1',
'email' => 'a@example.com',
); 1 次元配列は内部でラップしません。議論の結果: 1 次元配列は内部行を折り返さない。
例:
$users_id = array('23','12','24');//確認
配列の最後のカンマ:
配列の各行の末尾にはカンマが必要です。後で追加できるように。ただし、フロントエンド JSON の最後にカンマを付けることはできません。カンマを付けないと、一部のブラウザーがカンマをサポートしません。これについては今後の検討が必要です。議論の結果: どちらにしても、バックエンドは IE フロントエンドを考慮する必要がないためです。
例:
$user = array(
'id' => '123',
'name' => 'user1', //すべて動作します、利点: 大きな配列、多くの場合行を追加するので便利です。カンマはありません。追加するのは非常に困難です
);
$user = array(
'id' => '123',
'name' => 'user1' //すべてOK、利点: 厳密です。カンマは区切りを示し、最後に One は区切る必要はありません
);
一重引用符と二重引用符:
最初に一重引用符を使用し、エスケープが必要な場合は二重引用符を使用し、変数は二重引用符で囲みません。これは、これから説明するすべて二重引用符で構成される JSON とは異なります。ディスカッションの結果: 最初に一重引用符を使用してください。
例:
echo 'name is:' . '.'
$user = array(
'id' => '123',
);たとえ 1 行しかない場合でも、中括弧が必要です。
正解:
if(!empty($name)){
doSomething();
誤:
if(!empty($name))
復帰と改行:
line を使用フィード LF (n、0a、Unix スタイル)。 CR+LF (Windows スタイル) は使用しないでください。
参考: http://zh.wikipedia.org/zh-cn/%E6%8F%9B%E8%A1%8C
eclipse??》ワークスペース??》新しいテキストファイルの行区切り文字??》その他: Unix
エンコーディング:
BOM なしの UTF-8 を使用します。メモ帳は UTF-8 BOM CR+LF であるため、保存には Windows メモ帳を使用しないでください。
eclipse??》ワークスペース??》テキストファイルのエンコーディング??》その他: UTF-8
インデント:
インデントにはスペース 4 つ、またはタブを使用します。議論の結果:4枠。
4 つのスペースをサポートする人: // OK
http://www.oracle.com/technetwork/java/codeconventions-136091.html#262
2 つのスペースをサポートする人:
http://google-styleguide.googlecode .com/svn/trunk/cppguide.xml#Spaces_vs._Tabs
3、4、または 8 個のスペースをサポートします:
http://www.possibility.com/Cpp/CppCodingStandard.html#indent
インデントが正しいことを確認します。 4 つのスペースを使用します。5 つのスペースや 11 のスペースがあってはなりません。
eclipse??》一般??》エディタ??》テキスト エディタ??》空白文字を表示
vim ~/.vimrc
Expandtab を設定
Softtabstop=4 を設定
Shiftwidth=4 を設定
autoindent を設定
HTTP プロトコル キャッシュ:
この記事では最終更新時刻を示すために Last Modified を使用しており、キャッシュは禁止されていません。
header('Last Modified:Sat, 30 Oct 2010 13:21:21 GMT');
ユーザーのログインが必要なページはキャッシュが禁止されています。
header('Cache-Control:max-age=0');
header('Cache-Control:private');
HTTP プロトコルのエンコーディングと MIME:
HTTP 出力ではエンコーディングと MIME を宣言する必要があります。文字セットとセミコロンの間にはスペースが必要です。小文字の UTF-8 であっても大文字の UTF-8 であっても、ドキュメントが見つからないため、調査する必要があります。
たとえば、
header('Content-Type:application/json; charset=UTF-8');
header('Content-Type:application/xml; charset=UTF-8'); : application/xhtml+xml;
header('Content-Type:text/plain; charset=UTF-8'); - 8');
固有名詞の場合:
クラス、関数、ファイル名、ディレクトリ名など、さまざまな場所で固有名詞は特別に扱われず、すべて大文字は使用されません。ディスカッション: 小文字を使用してください。
理由: HTML、CSS、CRUD などの固有名詞は定義が困難です。さらに、すべて大文字はキャメル ケースとの競合を引き起こします。たとえば、ページ ヘルパー クラスでは、すべて大文字が HTMLHelper になりますが、これは HtmlHelper ほど優れたものではありません。
特別な処理はサポートしません:
HTML は固有名詞ですが、MIME では、text/HTML の代わりに Content-Type: text/html が使用されます。
例:
UserDB.php の代わりに UserDb.php を使用します。