PSR編碼規范 https://kdocs.cn/l/s2Ln0b3Jp?f=111


編碼規范

一. 基本約定

1源文件

1)、純PHP代碼源文件只使用 <?php 標簽,省略關閉標簽 ?> ;

2)、源文件中PHP代碼的編碼格式必須是無BOM的UTF-8格式;

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

4)、一個源文件只做一種類型的聲明,即,這個文件專門用來聲明Class, 那個文件專門用來設置配置信息,別混在一起寫;(class和interface不能混寫在一個源文件中)

2、縮進

使用Tab鍵來縮進,每個Tab鍵長度設置為4個空格,並且不得使用制表符進行縮進(PhpStorm快捷鍵Ctrl+Alt+L);

3、行

一行推薦的是最多寫120個字符,多於這個字符就應該換行了,一般的編輯器是可以設置的在非空白行的末尾不得有尾隨空格可以添加空行以提高可讀性並指示相關的代碼塊每行不得超過一個語句

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...必須遵守 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)聲明代碼塊后面必須有一行空行;

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

1)、繼承(extends) 和實現(implement) 必須和類名寫在一行。

2)、打開類的大括號必須在下一行,並且關閉括號必須
在主體之后的下一行;

3)、打開方法的括號必須在下一行,並且關閉括號必須
在主體后面的下一行;

4)、必須在所有屬性和方法上聲明可見性; abstract並且
final必須在能見度之前宣布; static必須在能見度后宣布;方法如果有多個參數,第一個參數后緊接“,” ,再加一個空格(即在參數列表中,每個逗號前不得有空格,每個逗號后必須有一個空。),如果參數有默認值,“=”左右各有一個空格分開(具有默認值的方法參數必須位於參數
列表的末尾)

(5)方法名稱不得在方法名稱后面用空格聲明。在括弧必須繼續自己的路線,和右括號必須繼續下去了下一行后的身體。在左括號后面不能有空格,並且在右括號之前不能有空格。

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

(7)在進行方法或函數調用時,方法或函數名稱與左括號之間不能有空格,在左括號后面不能有空格,並且在右括號之前不能有空格。在參數列表中,每個逗號前不得有空格,每個逗號后必須有一個空格。

參考1:

1

2

3

4

5

6

7

8

<?php

namespace Lib\Databaes;

 

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

    public getInfo($name, $age, $gender = 1) { // 參數之間有一個空格。默認參數的“=”左右各有一個空格,) 與 { 之間有一個空格

 

    }

}

參考2:

1

2

3

4

5

6

7

8

9

10

11

<?php

namespace Vendor\Package;

 

abstract class ClassName {

    protected static $foo; // static放后面

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

 

    final public static function bar() { // final放前面,static放最后。

        // 方法主體部分

    }

}

參考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

<?php

namespace library\Model;

 

use library\Helper\ImageHelper;

use library\Logic\UserMainLogic;

 

/**

 * 用戶表 數據模型

 *

 * @package library\Model

 */

class UserMainModel extends BasicModel {

     /**

     * 獲得用戶統計信息

     *

     * @param int $userId 用戶ID

     * @return array

     */

    public function getUserCard($userId) {

        $userId = intval($userId);

        return UserMainLogic::instance()->getUserCard($userId);

    }

 

    /**

     * 根據Id 獲取用戶信息

     *

     * @param int    $userId 用戶Id

     * @param string $field  顯示字段

     * @return array

     */

    public function getByUserId($userId = 0, $field = '*') {

        if (empty($userId)) {

            return array();

        }

 

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

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

 

        if (isset($info['image']) && isset($info['sex'])) {

            $info['image'] = ImageHelper::GetImageUrl($info['image'], $info['sex']);

        }

 

        return $info;

    }

}

 

3、控制結構

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

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

1

2

3

4

5

6

7

8

<?php

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

<?php

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

    case 0:

        echo 'First case, with a break'; // 對齊

        break; // 換行寫break,也對齊。

    case 1:

        echo 'Second case, which falls through';

        // no break

    case 2:

    case 3:

    case 4:

        echo 'Third case, return instead of break';

        return;

    default:

        echo 'Default case';

        break;

}

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

1

2

3

4

5

6

7

8

<?php

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

 

}

 

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

 

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

4)、for的寫法

1

2

3

4

<?php

for ($i = 0; $i < 10; $i++) { // for 與 ( 之間有一個空格,二元操作符 "="、"<" 左右各有一個空格,) 與 { 之間有一個空格

 

}

5)、foreach的寫法

1

2

3

4

<?php

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

 

}

6)、try catch的寫法

1

2

3

4

5

6

7

8

<?php

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

 

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

 

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

 

}

4、注釋

1)、行注釋

單行注釋應該和代碼合在一起;// 后面需要加一個空格;

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

大塊的注釋和代碼之間應該留一個空行。大的代碼塊之間也應該留空行,形成代碼段落。

2)、函數注釋

參數名、屬性名、標簽的文本 上下要對齊;

在第一個標簽前加一個空行;

5、空格

1)、賦值操作符(=,+= 等)、邏輯操作符(&&,||)、等號操作符(==,!=)、關系運算符(<,>,<=,>=)、按位操作符(&,|,^)、連接符(.) 左右各有一個空格;

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

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

6數組 的書寫格式

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

1

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

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

1

2

3

4

$where = array(

    'id' => 789,

    'user_name' => '52php'

);

 

所有左花括號 { 都不換行,並且 { 緊挨着的下方,一定不是空行!

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM