首頁 後端開發 php教程 PHP一些規範實例分享

PHP一些規範實例分享

Mar 19, 2018 pm 01:10 PM
php 分享 實例

本文主要和大家分享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(
    &#39;id&#39; => &#39;123&#39;,
    &#39;name&#39; => &#39;user1&#39;,
    &#39;email&#39; => &#39;a@example.com&#39;,
);
登入後複製

1维数组内部不换行。讨论结果:1维数组内部不换行。
如:

$users_id = array(&#39;23&#39;,&#39;12&#39;,&#39;24&#39;);//确定
登入後複製


数组最后的逗号:
数组每一行最后要有逗号,这样方便以后添加。不过前端JSON最后不能有逗号,否则有的浏览器不支持,待讨论。讨论结果:都行,因为后端不用考虑IE前端。
比如

$user = array(
    &#39;id&#39; => &#39;123&#39;,
    &#39;name&#39; => &#39;user1&#39;, //都行,优点:大数组,经常添加一行,方便。如果没有逗号,确实太难以添加了。
);
$user = array(
    &#39;id&#39; => &#39;123&#39;,
    &#39;name&#39; => &#39;user1&#39; //都行,优点:严谨,逗号表示分隔,最后一个不需要分隔。
);
登入後複製


单引号与双引号:
优先使用单引号,当需要转义时使用双引号,变量不放在双引号中。这与JSON不同,JSON全是双引号,待讨论。讨论结果:优先使用单引号。
比如:

echo &#39;name is:&#39; . $name . &#39;.&#39; . "\n";
$user = array(
    &#39;id&#39; => &#39;123&#39;,
);
登入後複製


条件判断的大括号:
必须有大括号,即使只有一行。
正确:

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(&#39;Last Modified:Sat, 30 Oct 2010 13:21:21 GMT&#39;);
登入後複製

需要用户登录的页面,禁止缓存。

header(&#39;Cache-Control:max-age=0&#39;);
header(&#39;Cache-Control:private&#39;);
登入後複製


HTTP协议编码与mime:
HTTP输出一定要声明编码与mime。charset与分号之间要有一个空格。小写utf-8还是大写UTF-8,尚未找到文档,待调研。
比如

header(&#39;Content-Type:application/json; charset=UTF-8&#39;);
header(&#39;Content-Type:application/xml; charset=UTF-8&#39;);
header(&#39;Content-Type:application/xhtml+xml; charset=UTF-8&#39;);
header(&#39;Content-Type:text/plain; charset=UTF-8&#39;);
header(&#39;Content-Type:text/html; charset=UTF-8&#39;);
登入後複製


专有名词大小写:
在类、函数、文件名、目录名等各种地方,不特殊对待专有名词,不采用全大写。讨论结果:使用小写。
原因:专有名词难以界定,比如HTML、CSS、CRUD。而且全大写导致与驼峰冲突,比如页面助手类,全大写是HTMLHelper,不如HtmlHelper。
支持不特殊处理:
HTML是专有名词,但mime中就使用Content-Type:text/html,而不是text/HTML。
例子:
采用UserDb.php,而不是UserDB.php。

相关推荐:

php规范解析

以上是PHP一些規範實例分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

討論 CakePHP 討論 CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP 是 PHP 的開源框架。它旨在使應用程式的開發、部署和維護變得更加容易。 CakePHP 基於類似 MVC 的架構,功能強大且易於掌握。模型、視圖和控制器 gu

CakePHP 檔案上傳 CakePHP 檔案上傳 Sep 10, 2024 pm 05:27 PM

為了進行文件上傳,我們將使用表單助理。這是文件上傳的範例。

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

CakePHP 快速指南 CakePHP 快速指南 Sep 10, 2024 pm 05:27 PM

CakePHP 是一個開源MVC 框架。它使應用程式的開發、部署和維護變得更加容易。 CakePHP 有許多函式庫可以減少大多數常見任務的過載。

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

See all articles