搜尋
首頁後端開發php教程PHP程式碼樣式風格規範分享

PHP程式碼樣式風格規範分享

Mar 05, 2018 am 10:30 AM
php分享規範

本文主要和大家分享PHP程式碼樣式風格規格,希望能幫助大家。

一、基本約定

1、原始檔

(1)、純PHP程式碼原始檔只使用

(2)、原始檔中PHP程式碼的編碼格式必須是無BOM的UTF-8格式;

(3)、使用Unix LF(換行符號)作為行結束符號;

(4)、一個原始檔案只做一種類型的聲明,即,這個檔案專門用來聲明Class, 那個檔案專門用來設定設定訊息,別混在一起寫;

2、縮排

使用Tab鍵來縮減,每個Tab鍵長度設定為4個空格;

3、行

一行推薦的是最多寫120個字符,多於這個字符就應該換行了,一般的編輯器是可以設定的。

//wo

補一條不出現橫滾屏和豎滾屏,

4、關鍵字和True/False/Null

PHP的關鍵字,必須小寫,boolean值:true,false,null 也必須小寫。

下面是PHP的“關鍵字”,必須小寫:

'__halt_compiler', 'abstract', 'and', 'array', 'as', 'break' , 'callable', 'case', 'catch', 'class', 'clone', 'const', 'continue', 'declare', 'default', 'die', 'do', 'echo', ' else', 'elseif', 'empty', 'enddeclare', 'endfor', 'endforeach', 'endif', 'endswitch', 'endwhile', 'eval', 'exit', 'extends', 'final' , 'for', 'foreach', 'function', 'global', 'goto', 'if', 'implements', 'include', 'include_once', 'instanceof', 'insteadof', 'interface', ' isset', 'list', 'namespace', 'new', 'or', 'print', 'private', 'protected', 'public', 'require', 'require_once', 'return', 'static' , 'switch', 'throw', 'trait', 'try', 'unset', 'use', 'var', 'while', 'xor'

5、命名

(1)、類別名稱使用大駝峰式(StudlyCaps)寫法;

(2)、(類別的)方法名稱使用小駝峰(cameCase)寫法;

( 3)、函數名稱使用小寫字母+ 底線寫法,如function http_send_post(); 

(4)、變數名稱使用小駝峰寫法,如$userName;

6、程式碼註解標籤

如函數註解、變數註解等,常用標籤有 @package、@var、@param、@return、@author、@todo、@throws

必須遵守phpDocument 標籤規則,不要另外去創造新的標籤,更多標籤查看 phpDocument官網

7、業務模組

(1)、涉及多個資料表更新/新增作業時,最外層要用事務,確保資料庫操作的原子性;

(2)、Model層,只做簡單的資料表的查詢;

(3)、業務邏輯統一封裝到Logic層;

(4)、控制器只做URL路由,不要當作業務方法呼叫;

(5)、控制器層不能出現SQL操作語句,如 ThinkPHP框架的where()、 order() 等模型方法,

即,控制器中,不要出現類似這樣的SQL語句:D('XXX')->where()->order()->limit( )->find();  

where()、order()、limit() 等SQL方法只能出現在Model層、業務層!

二、程式碼樣式風格

1、命名空間(Namespace) 和導入(Use)宣告

先簡單文字描述下:

  1. 命名空間(namespace)的宣告後面必須有一行空行;

  2. 所有的導入(use)宣告必須放在命名空間(namespace)宣告的下面;

  3. 一句宣告中,必須只有一個導入(use)關鍵字;

  4. #在導入(use)宣告程式碼區塊後面必須有一行空行;

用程式碼來說明下:

1

2

3

4

5

# 6

namespace Lib\Databases; // 下方必須空格一行

 

#class Mysql {

 

}

#namespace下空一行,才能使用use,再空一行,才能宣告class

}

1

2

3

4

5

#6

7

8

9

10

namespace Lib\Databases; // 下方必須一行

 

use FooInterface; // use 必須在namespace 後面宣告

use BarClass as Bar;

#」Bar;

##Bar;

##Bar;

##Bar;

##Bar; #use OtherVendor\OtherPackage\BazClass; // 下方必須空格一行

 

class Mysql {

 
########### ################ #######

2、類別(class),屬性(property)和方法(method)

(1)、繼承(extends) 和實作(implement) 必須和 class name 寫在一行。

1

2

#3

4

5

6

namespace Lib\Databaes;

 

class Mysql extends ParentClass implements \PDO , \DB { // 寫一行

 

}

#(2)、屬性(property)必須宣告其可見性,到底是 public 還是protected 還是 private,不能省略,也不能使用var, var是php老版本中的什麼方式,等用於public。

#

(3)、方法(method),必須 宣告其可見性,到底是 public 還是 protected 還是 private,不能省略。如果有多個參數,第一個參數後緊接「,」 ,再加一個空格:function_name ($par, $par2, $pa3), 如果參數有預設值,「=」左右各有一個空格分開。

1

2

#3

4

5

6

7

8

namespace Lib\Databaes;

class Mysql extends ParentClass implements \PDO, \DB { // 寫一行

    public $foo = null;# 

#    protected $age = '17';

}

1

2

#3

4

5

6

7

8

namespace Lib\Databaes;

class Mysql extends ParentClass implements \PDO, \DB { // 寫一行

    public getInfo($name, $age, $gender = 1) { 空格。預設參數的「=」左右各有一個空格,) 與{ 之間有一個空格

 

#    }

#}

(4)、當用到抽象(abstract)和終結(final)來做類別宣告時,它們必須放在可見性宣告(public 還是protected還是private)的前面。而當用到靜態(static)來做類別宣告時,則必須放在可見性宣告的後面。

直接上程式碼:

1

#2

3

4

5

6

7

8

#9

#10

#11

##namespace Vendor\Package;

 

abstract class ClassName {

    protected static $foo; // static放後面

    abstract protected function zim(); // abstract放前面

 

  前面,static放下最後。

        // 方法主體部份

    }

}

###################################################################################

3、控制結構

控制接口,就是 if else while switch等。這一類的寫法規範也是常常容易出現問題的,也要規範一下。

(1)、if,elseif,else寫法,直接上規範代碼吧:

##1

2

3

4

5

6

#7

8

if ($expr1) { // if 與( 之間有一個空格,) 與{ 之間有一個空格

 

# } elseif ($expr2) { // elesif 連著寫,與( 之間有一個空格,) 與{ 之間有一個空格

 

#} else { // else 左右各一個空格

 

}

#(2)、switch,case 注意空格與換行,還是直接上規範程式碼:

1

2

3

4

5

6

7

8

9

#10

#11

12

13

14

15

16

17

switch ($expr) { // switch 與( 之間有一個空格,) 與{ 之間有一個空格

    case 0:

       a break'; // 對位

        break; // 換行寫break,同樣對齊。

    case 1:

        echo 'Second case, which falls through';

     # 2 case 3:

    case 4:

#        echo 'Third case, return instead of break, ## #        echo 'Default case';

        break;

}

(3)、while,do while 的寫法也類似,上碼:

< ;?php

# #3

4

5

6

7

8

while ($expr) { // while 與( 之間有一個空格, ) 與{ 之間有一個空格

 ##}#2
 

do { // do 與{ 之間有一個空格

} while ($expr); // while 左右各有一個空格

(4)、for的寫法

1
3######4############(5)、foreach的寫法

1

2

##3

4

foreach ($iterable as $key => $value) { // foreach 與( 之間有一個空格,"=> ;" 左右各有一個空格,) 與{ 之間有一個空格

 

}

(6) 、try catch的寫法

#

try { // try右邊有一個空格

 

} catch (FirstExceptionType $e) { // catch 與( 之間有一個空格,) 與{ 之間有一個空格

} catch (OtherExceptionType $e) { // catch 與( 之間有一個空格,) 與{ 之間有一個空格

 

}

#

4、註解

(1)、行註解

// 後面需要加一個空格;

如果// 前面有非空字符,則//前面需要加一個空格;

(2)、函數註解

參數名稱、屬性名稱、標籤的文字上下要對齊;

在第一個標籤前加一個空白行;

1

#2

3

##4

5

6

7

8

1

2

##3

##4

# 5

6

7

8

9

10

11

##12

13

14

15

16

## /**

 * 這是一個範例函數,用來說明其他PHP

 * 格式化程式選項。參數

 * @param int    $two   第二個參數

 * @param string $third 第三個參數有較長的

 *     。 */

function foo($one, $two = 0, $three = "String") {

}

#}

5、空格

(1)、賦值運算子(=,+= 等)、邏輯運算子(&&,||)、等號運算子(==,!=)、關係運算子(,=)、位元運算子(&,|,^)、連接符號(.) 左右各有一個空格;

(2) 、if,else,elseif,while,do,switch,for,foreach,try,catch,finally 等與緊捱的左括號「(」之間有一個空格;

(3)、函數、方法的各個參數之間,逗號(",")後面有一個空格;

6、空行

(1)、所有左花括號 { 都不換行,且 { 緊挨著的下方,一定不是空白行;

(2)、同級程式碼(縮排相同)的 註解(行註解/區塊註解)前面,必須有一個空白行;

(3)、各個方法/函數之間都有一個空白行;

(4)、namespace語句、use語句、clase語句之間都有一個空白行;

(5) 、return語句

如果return 語句之前只有一行PHP程式碼,return 語句之前不需要空行;

如果return 語句之前有至少二行PHP程式碼,return 語句之前加一個空白行;

(5)、if,while,switch,for,foreach、try 等程式碼區塊之間以及 與其他程式碼之間有一個空白行;

 


4

 

【參考範例總結】

參考1:

1

2

3
5######6#######7######8######### ###參考2:

1

2

##3

##4

#5

6

7

8

9

10

##11

namespace Vendor\Package;

 

abstract class ClassName {

    protected static $foo; # / static放後面

    abstract protected function zim(); // abstract在前面

 

    final最後。

        // 方法主體部份

    }

}

#############################################################################

參考3:

1

2

##3

##4

#5

6

7

8

9

10

##11

#12

13

14

15

#16

17

18

# 19

20

21

22

23

24

#25

# 26

27

28

29

#30

#31

#32

#33

34

35

36

37

38
39

40

41

42

43

44

45

命名空間庫\模型;

使用庫\Helper\ImageHelper;

使用庫\Logic\UserMainLogic;

 

/**

 * 使用者表 資料模型

 *

 * @package library\Model

 */

類別UserMainModel 擴充BasicModel {

     /**

     * 取得使用者統計資料

     *

     * @param int $userId 使用者ID

# */

    公共函數getUserCard($userId ) {

        $userId = intval($userId);

        return UserMainLogic:: # 

    /**

     * 依照Id 取得使用者資訊

##     *

     * @param int    $userId 使用者Id

## 

     * @return array

     */

    公用函數 getByUserId($userId = 0, $field = '*') {# 問;

        $info = $this->field($field)->where($where)->find();

 

        •

 

      。 ]);

        }

        return $info;

##  

##

參考4:

 

1

2

##3

##4

#5

6

7

8

9

10

##11

#12

13

14

15

#16

17

18

# 19

20

21

22

23

24

#25

# 26

27

28

$serv = new swoole_server("127.0.0.1", 9502);

// 設定伺服器配置,我們將task_worker_num配置設為大於0以啟用任務工作者支援

$serv->set(array('task_worker_num' => 4));

 

// 附加接收事件的處理程序,上面已經解釋過。 $ data) {

    // 我們透過呼叫 $serv

# 的 task() 方法將任務分發給任務工作人員    // 此方法傳回一個任務 id 作為此任務的識別

    $task_id = $serv->task($data);

    echo “Dispath AsyncTask:id=$task_id\n”;

});

 

// 為任務事件附加處理程序,該處理程序將在任務工作執行緒中執行。 , $from_id, $data) {

    // 處理任務,用$data 做你想做的事

    echo "New AsyncTask[id=$task_id]".PHP_EOL;

 

    //任務任務處理完成後,我們將結果回傳給呼叫者worker。 OK");

});

 

//為完成事件附加處理程序,該處理程序將在伺服器工作人員中執行,並且在同一工作人員之前調度了這個任務。 .PHP_EOL;

});
#$serv->start();###############

 

 

總結:所有左花括號 { 都不換行,且 { 緊鄰的下方,一定不是空行!

 

上面的 程式碼樣式規範,參考了 Java、JavaScript、Objective-C、Go 等開發語言的規格!

Java語言對中國程式設計師影響太深,大部分人還是習慣把 左花括號 { 不換行!

書寫原則:做到 程式碼緊湊 而又不失去 小模組化 !

  

PSR-4 規範

#PSR-4規格是剛出沒多久的一條新的規範,它也是規範自動載入(autoload)的,是PSR-0的修改,屬於補充規範,

我簡單說下,主要是以下幾點: 

  1. 廢除了PSR-0中_就是目錄分割符的寫法,_底線在完全限定類別名稱中是沒有特殊意義了。 

  2. 類別檔案名稱要以 .php 結尾。 

  3. 類別名稱必須和對應的檔案名稱要一模一樣,大小寫也要一模一樣。

 

 

參考:

程式碼風格研究:左花括號 是否換行? ? ?

PHP中PSR-[0-4]程式碼規格

【補充】數組的書寫格式

#只有一個鍵值對時,就寫成一行:

1

$where = array('id' => 789);

有多個(二或二個以上)鍵值對時,就換行:

1

2

3

4

$where = array(

#    'id' => 789,

    'user_name' => 'phpgo'

);

相關推薦:

ThinkPHP 3.2.3 分頁程式碼樣式分享

PHP程式碼樣式

##################################################### php關於編碼規格的文檔(收藏)#######

以上是PHP程式碼樣式風格規範分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
可以在PHP會話中存儲哪些數據?可以在PHP會話中存儲哪些數據?May 02, 2025 am 12:17 AM

phpsessionscanStorestrings,數字,數組和原始物。

您如何開始PHP會話?您如何開始PHP會話?May 02, 2025 am 12:16 AM

tostartaphpsession,usesesses_start()attheScript'Sbeginning.1)placeitbeforeanyOutputtosetThesessionCookie.2)useSessionsforuserDatalikeloginstatusorshoppingcarts.3)regenerateSessiveIdStopreventFentfixationAttacks.s.4)考慮使用AttActAcks.s.s.4)

什麼是會話再生,如何提高安全性?什麼是會話再生,如何提高安全性?May 02, 2025 am 12:15 AM

會話再生是指在用戶進行敏感操作時生成新會話ID並使舊ID失效,以防會話固定攻擊。實現步驟包括:1.檢測敏感操作,2.生成新會話ID,3.銷毀舊會話ID,4.更新用戶端會話信息。

使用PHP會話時有哪些性能考慮?使用PHP會話時有哪些性能考慮?May 02, 2025 am 12:11 AM

PHP会话对应用性能有显著影响。优化方法包括:1.使用数据库存储会话数据,提升响应速度;2.减少会话数据使用,只存储必要信息;3.采用非阻塞会话处理器,提高并发能力;4.调整会话过期时间,平衡用户体验和服务器负担;5.使用持久会话,减少数据读写次数。

PHP會話與Cookie有何不同?PHP會話與Cookie有何不同?May 02, 2025 am 12:03 AM

PHPsessionsareserver-side,whilecookiesareclient-side.1)Sessionsstoredataontheserver,aremoresecure,andhandlelargerdata.2)Cookiesstoredataontheclient,arelesssecure,andlimitedinsize.Usesessionsforsensitivedataandcookiesfornon-sensitive,client-sidedata.

PHP如何識別用戶的會話?PHP如何識別用戶的會話?May 01, 2025 am 12:23 AM

phpIdentifiesauser'ssessionSessionSessionCookiesAndSessionId.1)whiwsession_start()被稱為,phpgeneratesainiquesesesessionIdStoredInacookInAcookInAcienamedInAcienamedphpsessIdontheuser'sbrowser'sbrowser.2)thisIdallowSphptpptpptpptpptpptpptpptoretoreteretrieetrieetrieetrieetrieetrieetreetrieetrieetrieetrieetremthafromtheserver。

確保PHP會議的一些最佳實踐是什麼?確保PHP會議的一些最佳實踐是什麼?May 01, 2025 am 12:22 AM

PHP會話的安全可以通過以下措施實現:1.使用session_regenerate_id()在用戶登錄或重要操作時重新生成會話ID。 2.通過HTTPS協議加密傳輸會話ID。 3.使用session_save_path()指定安全目錄存儲會話數據,並正確設置權限。

PHP會話文件默認存儲在哪裡?PHP會話文件默認存儲在哪裡?May 01, 2025 am 12:15 AM

phpsessionFilesArestoredIntheDirectorySpecifiedBysession.save_path,通常是/tmponunix-likesystemsorc:\ windows \ windows \ temponwindows.tocustomizethis:tocustomizEthis:1)useession_save_save_save_path_path()

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版