php代碼規範

基本規範

PHP-FIG:PSRphp

PSR基本規範中文翻譯html

命名規則

  • 全局變量以g_開頭git

  • 變量使用駝峯式,deleteArticlegithub

  • 常量中全部字母都必須大寫,詞間如下劃線分隔。UESTC_ROOT數組

  • 類名應以大寫字母開頭,每一個單詞的首字母大寫。ActionController安全

  • 是數組的變量,在最後必需要使用List或者Array變量註明。valueList框架

編碼規範

  • 源碼文件必須採用UTF-8編碼,且不得有BOM頭ide

  • 縮進採用soft tab,使用4個空格函數

  • 全部的全局變量應該寫在函數的最開頭,而且和後面的代碼以空行隔開codeigniter

  • 對於函數返回值的判斷,特別是true/false, 必須用===或!==

  • 字符串儘可能用’ ‘而不是」 「進行引用,一個是效率問題,一個是安全問題

  • if/while等結構體,即便只有一行,也必須加上花括號,不得寫成一行

  • 一個函數不得超過300行,建議控制在100行之內。

  • 數組使用[] 不要使用array() 。初始化array若是採用多行結構時,數據項部分須要縮進,且最後一個數據項後面的逗號不可省略,這是爲了後續便於添加

$a=[
    'a'=>1,
    'b'=>2,
];
  • 除模板外,不容許使用?>標記結尾, 避免其後誤加的字符干擾頁面渲染

  • 類的開始花括號 { 必須寫在其聲明後自成一行,結束花括號 } 也必須寫在其主體後自成一行。

  • 方法的開始花括號 { 必須寫在函數聲明後自成一行,結束花括號 } 也必須寫在函數主體後自成一行。

class Add
{
    final public static function getApple()
        {
        }
}
  • 類的屬性和方法必須添加訪問修飾符(private、protected 以及 public), abstract 以及 final 必須聲明在訪問修飾符以前,而 static 必須聲明在訪問修飾符以後。每一個類的屬性也必須添加訪問修飾符。

  • 常量 true 、false 和 null 必須所有小寫。

  • 參數列表中,每一個逗號後面必須要有一個空格,而逗號前面必定不能有空格。

  • 其餘示例

<?php
  if ($expr1) {
      // if body
  } elseif ($expr2) {
      // elseif body
  } else {
      // else body;
  }


  switch ($expr) {
      case 0:
          echo 'First case, with a 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;
  }


  while ($expr) {
      // structure body
  }


  do {
      // structure body;
  } while ($expr);


  for ($i = 0; $i < 10; $i++) {
      // for body
  }


  try {
      // try body
  } catch (OtherExceptionType $e) {
      // catch body
  }

邏輯規範

  • 避免因爲對錯誤的條件作判斷帶來if的嵌套。

減小if/else嵌套, 更利於代碼邏輯的理解。

不建議的方式(最好不要採用,而且條件中代碼塊超過10行的不得采用本方式):
if (a === false) {
    // error handle
} else {
    if (b === false) {
        // handle
    }
}
推薦的方式:
if (a === false) {
    // error handle
}

if (b === false) {
    // handle
}
  • 全部文件路徑都須要利用框架提供的宏寫成絕對路徑

  • 文件更新操做,必須使用臨時文件+mv的方式,切忌直接寫在原文件

  • 錯誤碼使用統一文件集中配置,而且使用常量,而不該裸寫數字

  • 把重複調用放在循環體外。

不推薦形式:
for($i = 0; $i < count($arr); $i++)
推薦形式:
$arrCount = count($arr);
for($i = 0; $i < $arrCount; $i++

註釋規範

  • 函數必須經過param和return標記指明其參數和返回值
  • 必要的地方使用非文檔性註釋(也就是「//」這種),提升代碼易讀性

參考如下兩個示例

<?php
/**
 * file summary.
 * @version 1.1.1
 */

 /**
  * A summary informing the user what the associated element does 函數總結
  *
  * A *description*, that can span multiple lines, to go _in-depth_ into the details of this element
  * and to provide some background information or textual references 較詳細的描述
  * 
  * @author XXX
  * @param string $var1 With a *description* of this argument, these may also
  *    span multiple lines
  * @param string(類型) $var2(名稱) 參數2的描述
  * @return void
  */
  function myFunction($var1,$var2)
  {
  }

/**
 * summary for this function
 *
 * @deprecated 1.0.0 No longer used by internal code and not recommended(對於之後將被移除或廢棄的函數須要註明).
 * @todo remove this function  之後要作的事情
 * @return void
 */
 function dead()
 {

 }

類的示例

<?php
/**
 * CodeIgniter
 *
 * @author  EllisLab Dev Team
 * @license http://opensource.org/licenses/MIT  MIT License
 * @link    https://codeigniter.com
 * @since   Version 1.0.0
 */

/**
 * Zip Compression Class
 *
 * This class is based on a library I found at Zend:
 * http://www.zend.com/codex.php?id=696&single=1
 *
 * The original library is a little rough around the edges so I
 * refactored it and added several additional methods -- Rick Ellis
 *
 * @package     CodeIgniter
 * @subpackage  Libraries
 * @category    Encryption
 * @author      EllisLab Dev Team
 * @link        https://codeigniter.com/user_guide/libraries/zip.html
 */
class CI_Zip {

    /**
     * Zip data in string form
     *
     * @var string
     */
    public $zipdata = '';

    /**
     * Initialize zip compression class
     *
     * @return  void
     */

    public function __construct()
    {
        //......
    }


    /**
     * Add Directory
     *
     * Lets you add a virtual directory into which you can place files.
     *
     * @param   mixed   $directory  the directory name. Can be string or array
     * @return  void
     */
    public function add_dir($directory)
    {
        //。。。。。
    }

}
相關文章
相關標籤/搜索