本文主要和大家分享PHP一些規範實例。希望能幫助大家。制定規範時要注意:一般不要出現2個都行的情況。例如tab和4個空格都行,結果導致程式碼混亂。
通用原則:
1、語意化
看到名字,就知道意思。
2、通用前綴
is表示是否、get表示讀取、set表示寫。 is後面優先跟形容詞,而不是名詞,例如是否多語言文字,應使用is_multilingual,而不是is_multilanguage。
3、單數與複數
參考js的函數命名規則:getElementById、getElementsByTagName、getElementsByName。
例如:
取我的多個好友的名字,應使用getFriendsName,而不是getFriendNames或getFriendName
取一個用戶,是getUser
取多個用戶,是getUsers
4、冗餘後綴
盡量不使用data、list、info後綴,除非特殊情況。
比如,js的命名就很注意,使用getElementsByTagName而不是getElementsInfoByTagName。
應該使用getFriends或getFriendsUserId,而不是getFriendsList;應該使用getUser,而不使用getUserInfo或getUserData。
不過有時候很難避免,例如有2個函數,分別是取用戶基本訊息,和取用戶詳細資料。
取使用者基本資訊:暱稱、頭像URI,函數名稱getUserBasic還是getUserBasicInfo?函數名稱以形容詞結尾感覺不合適。待討論。討論結果:getUserBasicInfo合適。
取使用者詳細資料:暱稱、頭像URI、簽名、生日,函數名getUser沒問題。
5、意義模糊的類別名稱、檔案名稱、目錄名稱
每當使用common、util、functions、class、object、basic作為檔案名稱時要慎重,由於這些字太通用,發展下去裡面東西可能越來越多,變成垃圾箱。要給這些一個準確的名字,例如要做字串處理的類,可以叫StringLib.php,放在lib目錄裡。
6、lib、plugin與addon的區別
有些類別、函數算做lib、plugin還是addon。待討論。討論結果:目前增強函數算是Lib,以後再考慮plugin和addon。
7、常用詞彙
優先使用URI,而不是URL。因為更嚴謹,新的命名開始使用URI。例如js的encodeURI,PHP的$_SERVER['REQUEST_URI']。
deadline與TTL:deadline表示最後時刻,TTL表示存活時間。例如現在時間是1310449710,TTL是60秒,則deadline是1310449710 + 60 = 1310449770。
類別名稱:
大寫字母開頭,駝峰命名。一般使用名詞,例如配置解析類別ConfigParser,而不是ParseConfig。
與Java、C++一致。
例如:class UserModel
類別的檔案名稱:
與類別名稱相同。這與php autoload有關,為了autoload,類別名稱總是很長。待討論。討論結果:遵守駝峰,也能實現自動類別載入。
與Java一致。
例如:class UserModel的檔案名稱為UserModel.php
非類別檔案名稱:
全小寫,底線分隔,不得使用空格。例如get_user.php。
目錄名稱:
全小寫,底線分隔,不得使用空格。如model、www。
函數名稱:
小寫字母開頭,駝峰命名,例如:function addBlog()。
與Java、C++一致。
函數表示功能,即動作,所以動詞優先,例如使用editBlog,而不用blogEdit。
PHP內建函數由於歷史原因,有多種風格,do_something,something_do,dosomething,比較新的函數用了doSomething,才與目前主流語言保持一致。
例如:paser_str、json_encode、substr、fetchAll。
歷史原因可能無法改變,但我們能保證新的程式碼是嚴謹的,不要讓自己成為歷史原因。
類別中的函數:
兩個函數中間空一行。如果有時間的話,各個函數按英文字母排序,免得太混亂。
例如:
class BlogModel { public function addBlog() { } public function updateBlog() { } }
檔註解:
註解緊接格式依照PHPdoc的要求:http://manual.phpdoc.org/HTMLframesConverter/default/phpDocumentor/tutorial_tags.author.pkg.html
<?php /** * blog的各种业务:添加、更新 * @author sink * */ class BlogModel { } ?>
#API註解:
一定要寫輸入參數,和輸出格式。寫清楚正確時輸出什麼,錯誤時輸出什麼。
否則別人無法使用。
函數註解:
一定要寫輸出格式。寫清楚正確時輸出什麼,錯誤時輸出什麼。
如果輸入參數比較複雜,包含數組,看參數無法一目了然,則要寫輸入參數的註解。
文檔註解與函數之間不能有空行。
如果函數內部步驟比較複雜,需要寫「行內註解」。
例如:
/** * 更新blog * @param int $id blog_id * @param array $data array( "content" => "", //内容 "tags" => "", //标签 "update_time" => "", //更新时间 ) * @return bool */ public function updateBlog($id,$data) { step1 //第一步:asdf step2 //第二步:qwer }
URI:
根据rfc1034国际标准的规定,域名中禁止出现下划线“_”,域名不区分大小写。
比如http://dl_dir.qq.com/是错误域名。
http://example.com与http://EXAMPLE.COM相同。
所以优先在URI中使用全小写,GET的name小写,但是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用了大写,微软用了小写。
优先在URI中使用减号“-”,而不是下划线,GET的name除外。
比如
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
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中文網其他相關文章!

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP中使用clone關鍵字創建對象副本,並通過\_\_clone魔法方法定制克隆行為。 1.使用clone關鍵字進行淺拷貝,克隆對象的屬性但不克隆對象屬性內的對象。 2.通過\_\_clone方法可以深拷貝嵌套對象,避免淺拷貝問題。 3.注意避免克隆中的循環引用和性能問題,優化克隆操作以提高效率。

PHP適用於Web開發和內容管理系統,Python適合數據科學、機器學習和自動化腳本。 1.PHP在構建快速、可擴展的網站和應用程序方面表現出色,常用於WordPress等CMS。 2.Python在數據科學和機器學習領域表現卓越,擁有豐富的庫如NumPy和TensorFlow。

HTTP緩存頭的關鍵玩家包括Cache-Control、ETag和Last-Modified。 1.Cache-Control用於控制緩存策略,示例:Cache-Control:max-age=3600,public。 2.ETag通過唯一標識符驗證資源變化,示例:ETag:"686897696a7c876b7e"。 3.Last-Modified指示資源最後修改時間,示例:Last-Modified:Wed,21Oct201507:28:00GMT。

在PHP中,應使用password_hash和password_verify函數實現安全的密碼哈希處理,不應使用MD5或SHA1。1)password_hash生成包含鹽值的哈希,增強安全性。 2)password_verify驗證密碼,通過比較哈希值確保安全。 3)MD5和SHA1易受攻擊且缺乏鹽值,不適合現代密碼安全。

PHP是一種服務器端腳本語言,用於動態網頁開發和服務器端應用程序。 1.PHP是一種解釋型語言,無需編譯,適合快速開發。 2.PHP代碼嵌入HTML中,易於網頁開發。 3.PHP處理服務器端邏輯,生成HTML輸出,支持用戶交互和數據處理。 4.PHP可與數據庫交互,處理表單提交,執行服務器端任務。

PHP在過去幾十年中塑造了網絡,並將繼續在Web開發中扮演重要角色。 1)PHP起源於1994年,因其易用性和與MySQL的無縫集成成為開發者首選。 2)其核心功能包括生成動態內容和與數據庫的集成,使得網站能夠實時更新和個性化展示。 3)PHP的廣泛應用和生態系統推動了其長期影響,但也面臨版本更新和安全性挑戰。 4)近年來的性能改進,如PHP7的發布,使其能與現代語言競爭。 5)未來,PHP需應對容器化、微服務等新挑戰,但其靈活性和活躍社區使其具備適應能力。

PHP的核心優勢包括易於學習、強大的web開發支持、豐富的庫和框架、高性能和可擴展性、跨平台兼容性以及成本效益高。 1)易於學習和使用,適合初學者;2)與web服務器集成好,支持多種數據庫;3)擁有如Laravel等強大框架;4)通過優化可實現高性能;5)支持多種操作系統;6)開源,降低開發成本。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

禪工作室 13.0.1
強大的PHP整合開發環境

WebStorm Mac版
好用的JavaScript開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)