ホームページ >バックエンド開発 >PHPチュートリアル >PHP の標準的な例をいくつか共有する
この記事では主に PHP の標準的な例をいくつか紹介します。皆さんのお役に立てれば幸いです。仕様を作成するときは、次の点に注意してください。一般に、両方が許容される状況は存在しません。たとえば、タブと 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++ と同じ。
Function は関数、つまりアクションを表すため、動詞が優先されます。たとえば、blogEdit の代わりに editBlog を使用します。
歴史的な理由により、PHP の組み込み関数には do_something、something_do、dosomething などの多くのスタイルがあり、新しい関数は現在の主流言語との一貫性を保つために doSomething を使用します。
例: paser_str、json_encode、substr、fetchAll。
歴史的な理由は変更できないかもしれませんが、新しいコードが厳格であることを保証し、歴史的な理由にならないようにすることはできます。
クラス内の関数:
2 つの関数の間には空の行があります。時間があれば、混乱を避けるために関数をアルファベット順に並べ替えてください。
例:
class BlogModel { public function addBlog() { } public function updateBlog() { } }
ファイルコメント:
コメントは8220de8c7b9607cf93aac8848d716aa9,不使用短标签b26da186e11666e6dd99f28d6205715c。因为与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
if大括号换行:
有争议无定论,待讨论。讨论结果:使用“同行”。
例如:
if(!empty($name)){ }
或者
if(!empty($name)) { //确定 }
支持换行者:
http://www.possibility.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大括号换行:
讨论结果:使用“同行”。
switch (...) { case 1: ... break; default: }
支持换行者:
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' //都行,优点:严谨,逗号表示分隔,最后一个不需要分隔。 );
单引号与双引号:
优先使用单引号,当需要转义时使用双引号,变量不放在双引号中。这与JSON不同,JSON全是双引号,待讨论。讨论结果:优先使用单引号。
比如:
echo 'name is:' . $name . '.' . "\n"; $user = array( 'id' => '123', );
条件判断的大括号:
必须有大括号,即使只有一行。
正确:
if(!empty($name)){ doSomething(); }
错误:
if(!empty($name)) doSomething();
回车换行:
使用换行LF(\n,0a,Unix风格)。不使用CR+LF(Windows风格)。
参考:http://zh.wikipedia.org/zh-cn/%E6%8F%9B%E8%A1%8C
eclipse——》workspace——》New text file line delimiter——》Other:Unix
编码:
使用UTF-8 no BOM。不得使用Windows记事本进行保存,因为记事本是UTF-8 BOM CR+LF。
eclipse——》workspace——》Text file encoding——》Other:UTF-8
缩进:
使用4个空格进行缩进,也可以采用tab进行缩进。讨论结果:4个空格。
支持4个空格者://确定
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——》General——》Editor——》Text Editors——》show whitespace characters
vim ~/.vimrc
set expandtab
set softtabstop=4
set shiftwidth=4
set 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。charset与分号之间要有一个空格。小写utf-8还是大写UTF-8,尚未找到文档,待调研。
比如
header('Content-Type:application/json; charset=UTF-8'); header('Content-Type:application/xml; charset=UTF-8'); header('Content-Type:application/xhtml+xml; charset=UTF-8'); header('Content-Type:text/plain; charset=UTF-8'); header('Content-Type:text/html; charset=UTF-8');
专有名词大小写:
在类、函数、文件名、目录名等各种地方,不特殊对待专有名词,不采用全大写。讨论结果:使用小写。
原因:专有名词难以界定,比如HTML、CSS、CRUD。而且全大写导致与驼峰冲突,比如页面助手类,全大写是HTMLHelper,不如HtmlHelper。
支持不特殊处理:
HTML是专有名词,但mime中就使用Content-Type:text/html,而不是text/HTML。
例子:
采用UserDb.php,而不是UserDB.php。
相关推荐:
以上がPHP の標準的な例をいくつか共有するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。