溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

JoshChen_php的規(guī)范有哪些

發(fā)布時間:2021-10-11 22:24:11 來源:億速云 閱讀:89 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“JoshChen_php的規(guī)范有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“JoshChen_php的規(guī)范有哪些”吧!

PHP規(guī)范
1. 為什么要編碼規(guī)范
?編碼規(guī)范(code conventions)對于程序員而言尤為重要,有以下幾個原因:
1.在一個軟件的生命周期中,80%的花費用于維護。

2.幾乎沒有任何一個軟件在其整個生命周期中均由最初的開發(fā)人員來維護。

3.編碼規(guī)范可以改善軟件的可讀性,可以讓程序員盡快而徹底地理解新的代碼。

4.如果將源碼作為產(chǎn)品發(fā)布,就需要確認它是否被很好地打包并且清晰無誤,和其他已構(gòu)建的任何產(chǎn)品一樣。

2. 概要
?用四個空格代替tab縮進。
?去掉PHP文件底部的“?>”。
?每行程序一般少于80字符,超出部分,分成多行書寫。
?每行只寫一條語句,不允許把多個短語句寫在一行中。
?應(yīng)為文件和函數(shù)添加注釋。
?應(yīng)及時刪除廢除的注釋代碼。
?變量、函數(shù)的命名應(yīng)規(guī)范。

3. 編輯器設(shè)定
3.1. 縮進
所有的縮進使用空格取代Tab制表符。PHP文件采用4個空格的縮進,HTML文件以及HTML文件中嵌入的Javascript代碼采用2個空格的縮進;單獨的 Javascript以及CSS文件采用4個空格的縮進。

3.2. 字符編碼
所有PHP、HTML文件均保存為No Bom UTF-8的字符編碼。

4. 代碼布局
4.1. 文件底部
去掉文件底部 “?>”。

4.2. 相對獨立的程序塊之間、變量說明之后必須加空行
示例:如下例子不符合規(guī)范

復(fù)制代碼 代碼如下:

if (!$valid_ni()){
    ... // program code
}
$repssn_ind = $ssn_data['index']->repssn_index;
$repssn_ni  = $ssn_data['index']->ni;
應(yīng)如下書寫:

if (!valid_ni(){
    ... // program code
}

$repssn_ind = $ssn_data['index]->repssn_index;
$repssn_ni  = $ssn_data[index]->ni;

4.3. 較長的語句要分成多行書寫
一行程序需小于80字符

較長的語句要分成多行書寫,長表達式要在低優(yōu)先級操作符處劃分新行,操作符放在新行之首,劃分出的新行要進行適當?shù)目s進,使排版整齊,語句可讀。

循環(huán)、判斷等語句中若有較長的表達式或語句,則要進行適應(yīng)的劃分,長表達式要在低優(yōu)先級操作符處劃分新行,操作符放在新行之首示例:

復(fù)制代碼 代碼如下:

$perm_count_msg->len = NO7_TO_STAT_PERM_COUNT_LEN
                          + STAT_SIZE_PER_FRAM * strlen( $len );

$act_task_table[$frame_id * STAT_TASK_CHECK_NUMBER + $index]->occupied
              = $stat_poi[index]->occupied;

$act_task_table[taskno]->duration_true_or_false
              = sys_get_sccp_statistic_state( $stat_item );

if (($taskno < $max_act_task_number)
&& (n7stat_stat_item_valid ($stat_item))){
    ... // program code
}

for ($i = 0, $j = 0; ($i < $bufferKeyword['word_index']->word_length)
                    && ($j < new_keyword->word_length); $i++, $j++){
    ... // program code
}

4.4. 一行只寫一條語句
不允許把多個短語句寫在一行中,即一行只寫一條語句。示例:如下例子不符合規(guī)范

$rect->length = 0;  $rect->width = 0;
應(yīng)如下書寫:
$rect->length = 0;$rect->width  = 0;4.5. 始終包含大括號
這是因為懶于多敲兩個字符而給代碼清晰帶來問題的又一個情形。

示例:如下例子不符合規(guī)范

復(fù)制代碼 代碼如下:


if ($condition)    do_stuff();
if ($condition)
     do_stuff();
 while ($condition)
     do_stuff();
 for ($i = 0; $i < $size; $i++)
     do_stuff($i);


應(yīng)如下書寫

復(fù)制代碼 代碼如下:

if (condition){
    do_stuff();
}
while ($condition){
    do_stuff();
}
for ($i = 0; $i < $size; $i++){
    do_stuff();
}


4.6. switch寫法
示例:如下例子符合規(guī)范

復(fù)制代碼 代碼如下:

switch (){
case ‘1':
    ..program
    break;
case ‘2':
    ..program
    break;
}


4.7. 大括號放在哪兒
程序塊的分界符(大括號‘{'和‘}')應(yīng)各獨占一行并且位于同一列,同時與引用它們的語句左對齊。

而在函數(shù)體的開始、類的定義、以及if、for、do、while、switch、case語句中的右大括號應(yīng)放在行尾, 左大括號應(yīng)與右大括號所在行的行首處在同一列

示例:如下例子不符合規(guī)范

復(fù)制代碼 代碼如下:


for (...)
{
    ... // program code
}

if (...)
{
    ... // program code
}

function example_fun()
{
    ... // program code
}
應(yīng)如下書寫:for (...){
    ... // program code
}

if (...){
    ... // program code
}

function example_fun(){
 ... // program code
}

4.8. 符號之間使用空格
采用這種松散方式編寫代碼的目的是使代碼更加清晰。

由于留空格所產(chǎn)生的清晰性是相對的,所以,在已經(jīng)非常清晰的語句中沒有必要再留空格,如果語句已足夠清晰則括號內(nèi)側(cè)(即左括號后面和右括號前面)不需要加空格,多重括號間不必加空格。在長語句中,如果需要加的空格非常多,那么應(yīng)該保持整體清晰,而在局部不加空格。給操作符留空格時不要連續(xù)留兩個以上空格。

示例:如下例子不符合規(guī)范

復(fù)制代碼 代碼如下:

$i=0;
if($i<7) ...
if ( ($i < 7)&&($j > 8) ) ...
for($i=0; $i<$size; $i++) ...
$i=($j < $size)?0:1;
do_stuff( $i, "foo", $b );


應(yīng)如下書寫:

復(fù)制代碼 代碼如下:

$i = 0;
if ($i < 7) ...
if (($i < 7) && ($j > 8)) ...
for ($i = 0; $i < $size; $i++) ...
$i = ($j < $size) ? 0 : 1;
do_stuff($i, "foo", $b);


4.9. 字符串連接符
當使用字符串連接符時必須在句點(.)兩側(cè)加上空格。

示例:如下例子不符合規(guī)范

復(fù)制代碼 代碼如下:

$str = ‘<img src=”'.$thumb_url.'” />';
$str = ‘<img src=”' .$thumb_url. ‘”/>';
應(yīng)如下書寫:$str = ‘<img src=”' . $thumb_url . ‘” />';


4.10. 空行的使用
誰也不愿意看到擠在一堆的無序的代碼。我們在寫代碼的時候總是會利用一些空行來增加代碼可讀性。合理的利用空格來區(qū)分代碼段會使代碼的邏輯思路更加明確。我們強行規(guī)定的空行有以下兩種情況:

?<?php 之后必須有且只有1個空行
??> 之前必須有且只有1個空行
?兩個函數(shù)之間必須有1個空行。
?return、die、exit之前如果有其他語句的情況下應(yīng)加上一個空行。
在代碼中我們不允許在行尾有多余的空格。

5. 注釋
5.1. 文件頭部模板
/**
 * ShopEx網(wǎng)上商店 文件中文名稱
 * 類或者文件的說明,此處可以使用html
 *
 * @package
 * @version $Id$
 * @copyright 2003-2008 Shanghai ShopEx Network Tech. Co., Ltd.
 * @license Commercial
 * =================================================================
 */
5.2. 函數(shù)頭部注釋
每個函數(shù)之前應(yīng)當有注釋,告訴一個程序員使用這個函數(shù)所需要知道的事情。一個最小化的注釋應(yīng)包括:每個參數(shù)的意義,期望的輸入,函數(shù)的輸出。注釋還應(yīng)當給出在錯誤條件下(還有具體是什么錯誤條件)這個函數(shù)的行為。(注釋應(yīng)該確保)其他人不必察看這個函數(shù)的代碼,就可以自信地在自己的代碼中調(diào)用這個函數(shù)。

另外,為任何技巧性的,晦澀的或者并非顯而易見的代碼添加注釋,無疑是我們應(yīng)該做的事情。對文檔尤其重要的是你的代碼所做的任何假設(shè),或者它正確運轉(zhuǎn)的前提。任何一個開發(fā)者應(yīng)該能夠查看應(yīng)用程序的任意部分,并且在合理的時間內(nèi)斷定(代碼的執(zhí)行中)發(fā)生了什么。

復(fù)制代碼 代碼如下:

        /**
         * some_func
         * 函數(shù)的含義說明
         * <div>這部分可以隨意輸入<b>html</b></div>
         * 因為這是phpdocument的約定。
         *
         * @param mixed $arg1 參數(shù)一的說明
         * @param mixed $arg2 參數(shù)二的說明
         * @access public
         * @return bool
         */


5.3. 刪除廢除的注釋
廢除的注釋,注釋的代碼要及時刪除

5.4. 常量加注釋
對于所有有物理含義的變量、常量,如果其命名不是充分自注釋的,在聲明時都必須加以注釋,說明其物理含義。變量、常量、宏的注釋應(yīng)放在其上方相鄰位置或右方。

示例:

復(fù)制代碼 代碼如下:

// active statistic task number
Define(‘MAX_ACT_TASK_NUMBER',1000)

Define(‘MAX_ACT_TASK_NUMBER',1000);  // active statistic task number

5.5. 注釋位置
注釋應(yīng)與其描述的代碼相近,對代碼的注釋應(yīng)放在其上方或右方(對單條語句的注釋)相鄰位置,不可放在下面,如放于上方則需與其上面的代碼用空行隔開。

示例:如下例子不符合規(guī)范

例1:

復(fù)制代碼 代碼如下:

// get replicate sub system index and net indicator
$repssn_ind = $ssn_data[$index]->repssn_index;
$repssn_ni = $ssn_data[$index]->ni;
例2:$repssn_ind = $ssn_data[$index]->repssn_index;
$repssn_ni = $ssn_data[$index]->ni;
// get replicate sub system index and net indicator
應(yīng)如下書寫
// get replicate sub system index and net indicator
$repssn_ind = $ssn_data[$index]->repssn_index;
$repssn_ni = $ssn_data[$index]->ni;


5.6. 數(shù)據(jù)結(jié)構(gòu)聲明加注釋
數(shù)據(jù)結(jié)構(gòu)聲明(數(shù)組),必須加以注釋。對數(shù)據(jù)結(jié)構(gòu)的注釋應(yīng)放在其上方相鄰位置,不可放在下面;對結(jié)構(gòu)中的每個域的注釋放在此域的右方。

示例:按如下形式說明

復(fù)制代碼 代碼如下:

// sccp interface with sccp user primitive message name
$sccp_user_primitive = array(
    ‘N_UNITDATA_IND' => 1,  // sccp notify sccp user unit data come
    ‘N_NOTICE_IND => 2,   // sccp notify user the No.7 network can not transmission this message
    N_UNITDATA_REQ  => 3 // sccp user's unit data transmission request
       )


5.7. 全局變量注釋
全局變量要有較詳細的注釋,包括對其功能、取值范圍、哪些函數(shù)或過程存取它以及存取時注意事項等的說明。

5.8. 注釋縮排
注釋與所描述內(nèi)容進行同樣的縮排, 可使程序排版整齊,并方便注釋的閱讀與理解。

示例:如下例子不符合規(guī)范

復(fù)制代碼 代碼如下:


function example_fun(){
    // code one comments
    CodeBlock One

    // code two comments
    CodeBlock Two
}

應(yīng)改為如下布局:

復(fù)制代碼 代碼如下:

function example_fun(){
    //fdgfd
    CodeBlock One

    // code two comments
    CodeBlock Two
}

5.9. 將注釋與其上面的代碼用空行隔開
示例:如下例子,顯得代碼過于緊湊。

復(fù)制代碼 代碼如下:

// code one comments
program code one
// code two comments
program code two
應(yīng)如下書寫// code one comments
program code one

// code two comments
program code two

5.10. 連續(xù)case注釋
對于switch語句下的case語句,如果因為特殊情況需要處理完一個case后進入下一個case處理,必須在該case語句處理完、下一個case語句前加上明確的注釋。這樣比較清楚程序編寫者的意圖,有效防止無故遺漏break語句。

示例:

復(fù)制代碼 代碼如下:

switch ($i){
    case ‘CMD_INIT':
        echo "i equals 0";
    break;
    case ‘CMD_START:
        echo "i equals 1";// now jump into case CMD_A
    case ‘CMB_A':
        echo "i equals 2";
    break;
}


5.11. 結(jié)構(gòu)體聲明
代碼中代表結(jié)構(gòu)體的數(shù)組變量,要提前聲明。

示例:

復(fù)制代碼 代碼如下:

function example_fun(){
    $student = array(
        'name' => '小明', //名稱
        'addr' => '詳細地址', //地址
        'sex' => '男', //性別
        'city' => '上海' //城市
    )
}


5.12. 注釋格式
注釋格式統(tǒng)一,單行注釋必須使用“// …… ”,多行使用一對/*…*/

示例:如下例子不符合規(guī)范。

復(fù)制代碼 代碼如下:

/* if receive_flag is TRUE */
/* if receive_flag is FALSE */
if ($receive_flag)


應(yīng)如下書寫:

復(fù)制代碼 代碼如下:

/* if receive_flag is TRUE
if receive_flag is FALSE */
if ($receive_flag)


5.13. 注釋以中文為主
注釋應(yīng)考慮程序易讀及外觀排版的因素,使用的語言若是中、英兼有的,建議多使用中文,除非能用非常流利準確的英文表達。

6. 命名規(guī)定
6.1. 禁止拼音命名法
代碼中禁止用拼音命名法。

6.2. 變量命名
變量名應(yīng)當全部小寫,并且詞語之間以單個下劃線分隔。

例如: $current_user 是正確的, 但是 $currentuser 和 $currentUser 就不正確。

名稱應(yīng)當是描述性的,并且簡明。我們自然不希望使用冗長的句子作為變量名,但是多輸入幾個字符總好于疑惑于某個變量到底是干什么用的。

6.3. 函數(shù)命名
使用單詞間用單下劃線分隔的小寫名稱,允許動賓詞組為執(zhí)行某操作的函數(shù)命名。如果是OOP方法,可以只有動詞(名詞是對象本身)。允許系表函數(shù)命名。

示例:

復(fù)制代碼 代碼如下:

       function print_record($rec_ind)
       function input_record()
       function get_current_color()
       function is_boy()

動詞表:add / edit / remove       begin / end        create / destroy
first / last       get / release   get / set
increment / decrement                 put / get
lock / unlock      open / close
min / max          old / new          start / stop
next / previous    source / target    show / hide
send / receive
cut / paste        up / down

系詞表:    is has
對于私有方法,以_開頭。

6.4. 循環(huán)計數(shù)器
允許使用一個單字符變量名的唯一情形是當它作為一個循環(huán)計數(shù)器的時候。在這種情況下,外層循環(huán)的計數(shù)器應(yīng)當始終是 $i。如果有一個循環(huán)處于這個循環(huán)的內(nèi)部,它的計數(shù)器應(yīng)當是 $j,進而是 $k,等等。如果循環(huán)的計數(shù)器是一個已經(jīng)存在并且名字有意義的變量,本規(guī)范并不適用。

例如:

復(fù)制代碼 代碼如下:


for ($i = 0; $i < $outer_size; $i++){
    for ($j = 0; $j < $inner_size; $j++){
       foo($i, $j);
    }
 }
 

6.5. 函數(shù)參數(shù)
參數(shù)遵循和變量名字相同的約定。我們不希望一堆這樣的函數(shù):do_stuff($a, $b, $c)。在大部分情況下,我們希望僅僅看看函數(shù)的聲明,就知道怎樣使用它。

7. 可讀性
7.1. 運算符的優(yōu)先級
注意運算符的優(yōu)先級,并用括號明確表達式的操作順序,避免使用默認優(yōu)先級。防止閱讀程序時產(chǎn)生誤解,防止因默認的優(yōu)先級與設(shè)計思想不符而導(dǎo)致程序出錯。

示例:下列語句中的表達式

復(fù)制代碼 代碼如下:

$word = ($high << 8) | $low     (1)
if (($a | $b) && ($a & $c))     (2)
if (($a | $b) < ($c & $d))      (3)
如果書寫為$high << 8 | $low
$a | $b && $a & $c
$a | $b < $c & $d
由于$high << 8 | $low = ($high << 8) | $low,
$a | $b && $a & $c = ($a | $b) && ($a & $c),


(1)(2)不會出錯,但語句不易理解;$a | $b < $c & $d = $a | ($b < $c) & $d,
(3)造成了判斷條件出錯。

7.2. 避免數(shù)字,使用常量
避免使用不易理解的數(shù)字,用有意義的常量來替代。

示例:如下的程序可讀性差。

復(fù)制代碼 代碼如下:


if ($trunk[$index]->trunk_state == 0){
    $trunk[$index]->trunk_state = 1;
    ...  // program code
}


應(yīng)改為如下形式。

復(fù)制代碼 代碼如下:

define(TRUNK_IDLE, 0)
define(TRUNK_BUSY, 1)

if ($trunk[$index]->trunk_state == TRUNK_IDLE){
    $trunk[$index]->trunk_state = TRUNK_BUSY;
    ...  // program code
}

7.3. 源程序中關(guān)系較為緊密的代碼應(yīng)盡可能相鄰
便于程序閱讀和查找。

示例:以下代碼布局不太合理。

復(fù)制代碼 代碼如下:

$rect->length = 10;
$char_poi = $str;
$rect->width = 5;


若按如下形式書寫,可能更清晰一些。

復(fù)制代碼 代碼如下:

$rect->length = 10;
$rect->width = 5; // 矩形的長與寬關(guān)系較密切,放在一起。
$char_poi = $str;
 

8. 函數(shù)
8.1. 接口函數(shù)參數(shù)的合法性檢查
函數(shù)參數(shù)的合法性檢查應(yīng)由函數(shù)的調(diào)用者負責,接口函數(shù)做必要性合法性檢查(不強制)。

總結(jié)為:以外為主,以內(nèi)為輔,內(nèi)部不強制。

8.2. 函數(shù)規(guī)模
函數(shù)的規(guī)模限制在100行以內(nèi),不包括注釋和空格行。

8.3. 一個函數(shù)僅完成一件功能
8.4. 不要設(shè)計多用途面面俱到的函數(shù)
除調(diào)度函數(shù)外,多功能集于一身的函數(shù),很可能使函數(shù)的理解、測試、維護等變得困難

8.5. 多段代碼重復(fù)同一件事情
如果多段代碼重復(fù)做同一件事情,那么在函數(shù)的劃分上可能存在問題。若此段代碼各語句之間有實質(zhì)性關(guān)聯(lián)并且是完成同一件功能的,那么可考慮把此段代碼構(gòu)造成一個新的函數(shù)。

9. 質(zhì)量保證
9.1. 兼容性
9.2. 三元運算符
三元運算符,在一行代碼里只允許使用一級

三元運算符只應(yīng)該用來做簡單的事情。它們只適合拿來做賦值用,根本不是用來做函數(shù)調(diào)用或者任何復(fù)雜的事情的。如果使用不當,它們會影響可讀性,所以不要沉迷于使用它們來減少打字。

示例:不應(yīng)該使用它們的地方
(($i < $size) && ($j > $size)) ? do_stuff($foo) : do_stuff($bar);

示例:使用它們的合適地方$min = ($i < $j) ? $i : $j;

9.3. 初始化變量
變量使用前應(yīng)初始化,error_reporting 將加入 E_NOTICE。意味著,變量未初始化將報錯。這個問題最容易在檢查 HTML 表單傳遞了什么變量時出現(xiàn)。這些錯誤可以通過使用內(nèi)嵌的 isset() 或者empty()函數(shù)檢查一個變量是否被設(shè)置來避免。

示例: 老辦法
if ($forum) ...
新辦法:if (!empty($forum)) ...
if (isset($forum)) …

9.4. 引用字符串
在 PHP 中有兩種不同的方式引用字符串——使用單引號或使用雙引號。主要區(qū)別是:解析器在雙引號括起的字符串中執(zhí)行變量替換,卻不在單引號括起的字符串中執(zhí)行。因此,應(yīng)當始終使用單引號,除非你確實需要對字符串進行變量替換。這樣,我們可以避免讓解析器解析一堆不需要執(zhí)行替換的字符串的麻煩。同樣,如果你使用字符串變量作為函數(shù)調(diào)用的一部分,你不需要用引號把那個變量括起來。同樣,那只會給解析器增加不必要的工作。無論如何,要注意幾乎所有雙引號中的轉(zhuǎn)義序列在單引號中都不會起作用。如果這條規(guī)范使你的代碼難以閱讀的話,要小心,并且放心地打破它。

示例:如下例子不符合規(guī)范

復(fù)制代碼 代碼如下:

$str = "This is a really long string with no variables for the parser to find.";
do_stuff("$str");
 


應(yīng)如下書寫:

復(fù)制代碼 代碼如下:

$str = 'This is a really long string with no variables for the parser to find.';
do_stuff($str);


當由于可讀性的原因不得不使用雙引號作為引用符時,注意其中所有的變量需用{}包圍:$str = " This is '{$what}' with no variables for the parser to find."

9.5. 關(guān)聯(lián)數(shù)組的鍵名
在 PHP 中,使用一個不用引號括起來的字符串作為一個關(guān)聯(lián)數(shù)組的鍵名是可以運行的。我們不想這樣做——為了避免混亂,這個字符串應(yīng)當用引號括起來。注意,這只是當我們使用字符串時的情況,不是當我們使用變量時的情況。示例:如下例子不符合規(guī)范

$foo = $assoc_array[blah];
應(yīng)如下書寫:
$foo = $assoc_array['blah'];

9.6. 簡化運算符
簡化自增($i++)和自減($i--)運算符是導(dǎo)致可讀性問題的僅有的簡化運算符。這些運算符不應(yīng)當被用作表達式的一部分。然而,他們可以獨占一行使用。在表達式中使用它們(帶來的便利)還不夠調(diào)試時頭痛的(代價)。

示例:如下例子不符合規(guī)范

復(fù)制代碼 代碼如下:

$array[++$i] = $j;
$array[$i++] = $k;
應(yīng)如下書寫:$i++;
$array[$i] = $j;
$array[$i] = $k;
$i++;
 

9.7. if 以及else if的寫法
當條件語句中的條件存在多個,并且有變量值的判斷的時候,需要把變量的判斷語句放在其他的條件語句之前。

示例:如下例子不符合規(guī)范

復(fù)制代碼 代碼如下:

if (function_exists(‘ob_gzhandler') && $val == 1){
}
應(yīng)如下書寫:if ($val == 1 && function_exists(‘ob_gzhandler')){
}
雖然在 PHP 中else if 和 elseif 的作用基本上是一樣的。但是為了代碼的統(tǒng)一性(也有傳言 else if 會出現(xiàn)不穩(wěn)定的情況),我們要求將 elseif 之間不保留空格:if ($bool == 2){
}elseif ($n = 1){
}


9.8. 輸入變量的初始化
無論是函數(shù)的參數(shù)還是通過URL傳遞的變量,在調(diào)用之前均必須對其進行預(yù)處理以及設(shè)定默認值。

字符串必須進行trim及轉(zhuǎn)義的處理,并且如果變量的值是在我們預(yù)計的范圍之內(nèi),需要對變量的非法值做出相應(yīng)的處理;對于數(shù)字型的變量則需要進行intval或者floatval的處理。

9.9. require和include
在程序中需要使用包含文件的時候我們要求使用require_once或者include_once,不允許使用require或者include。

對于程序必須包含的文件只能采用require_once,而對于某些有條件包含的文件在引用時只能使用include_once。

9.10. 文件命名
文件名應(yīng)當全部小寫,并且詞語之間以單個下劃線分隔。

例如: current_user.php 是正確的, 但是 currentuser.php 和 currentUser.php 就不正確。

名稱應(yīng)當是描述性的,并且簡明。我們自然不希望使用冗長的句子作為文件名,但是多輸入幾個字符總好于疑惑于某個文件到底是干什么用的。

10. SQL語法
10.1. SQL 代碼布局
既然我們都在使用不同的編輯器設(shè)置,不要嘗試去做諸如在 SQL 代碼中實現(xiàn)列對齊此類的麻煩事。要做的是,不管用何種方法,把語句斷行到它們單獨的行上去。這里有一個 SQL 代碼看上去應(yīng)該是什么樣子的示例。注意在哪里斷行,大寫,和括號的用法。

例如:

復(fù)制代碼 代碼如下:

SELECT field1 AS something, field2, field3
FROM `table` a, `table` b
WHERE (this = that) AND (this2 = that2)


10.2. 表名和字段值
SQL語句中的表名與字段名避免使用保留字;同時所有字段值的變量名,如果是數(shù)值型,需要強制類型轉(zhuǎn)換。intval,floatval…

10.3. SQL select 語句
在已知需要查詢的字段的前提下,不允許使用如下的代碼:

SELECT * FROM `mytable`
取而代之的寫法是將每一個字段名寫上去,請不要偷懶。SELECT col1, col2, col3 FROM `mytable`
在需要獲得已知記錄數(shù)量情況下,請使用 LIMIT offset, count 的方式,盡量不要使用無 LIMIT 的 SELECT 語句。

在需要或者滿足條件的記錄數(shù)量的情況下,請使用 SELECT count([*|col1]) FROM 的方式,盡量不要使用 SELECT col1 FROM 的方式。

需要進行邏輯運算的時候,盡量不要使用不等于,可以使用大于或者小于的方式。

10.4. SQL insert 語句
SQL INSERT 語句可以寫成兩種不同方式?;蛘吣忝鞔_指明要插入的列,或者你已經(jīng)知道數(shù)據(jù)中各列的順序,不用詳細指定它們。我們希望使用前一種方法,也就是詳細說明插入哪些列。這意味著應(yīng)用程序代碼不會依賴于數(shù)據(jù)庫中字段的順序,也不會因為我們增加另外的字段而崩潰(當然,除非它們被指定為 NOT NULL)。

例如:
# 這不是我們想要的

復(fù)制代碼 代碼如下:

INSERT INTO `mytable`
VALUES ('something', 1, 'else')


# 這是正確的。

復(fù)制代碼 代碼如下:

INSERT INTO `mytable` (column1, column2, column3)
VALUES ('something', 1, 'else')


11. smarty語法
11.1. 界定符
界定符為 <{ }>

11.2. 雙引號、單引號
為了避免dreamweaver將Smarty語句中的雙引號改寫為&quot;,我們要求在Smarty的花括號中不允許使用雙引號,而是使用單引號。

錯誤的寫法:
<{if $user_name eq ""}>匿名用戶<{/if}>
<{insert name=”query_info”}>
正確的寫法:
<{if $user_name eq ''}>匿名用戶<{/if}>
<{insert name='query_info'}>

11.3. 有條件設(shè)置HTML屬性值
當需要在模板中有條件的設(shè)置HTML元素屬性值的時候,我們要求所有語句均包含在雙引號之內(nèi)。錯誤的代碼:

復(fù)制代碼 代碼如下:

<div class=
<{if $promote_price>0}>"promote_goods"
<{else}>”normal_goods”<{/if}>
><{$goods.goods_name}></div>


正確的寫法:

復(fù)制代碼 代碼如下:

<div class="<{if $promote_price gt 0}>promote_goods
<{else}>nomarl_goods<{/if}>"><{$goods.goods_name}></div>


11.4. 條件修飾符
在smarty中可以用eq、neq、gt、lt等來分別表示==、!=、>、<。那我們到底該使用哪種呢?

當Smarty語句出現(xiàn)在HTML標簽內(nèi)時不允許使用==、!=這類修飾符,如果使用了這類修飾符有可能導(dǎo)致該符號或者其他的HTML相關(guān)符號被Dreamweaver自動轉(zhuǎn)義。

總之,盡量使用eq、gt等這類條件修飾符,避免直接使用==、>。

到此,相信大家對“JoshChen_php的規(guī)范有哪些”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI