PHP 代碼規(guī)范簡潔之道

作者:Scholer's Blog
原文地址:http://0x1.im/blog/php/tidy-your-php-code.html

  1. 統(tǒng)一的編碼規(guī)范
    --

編碼規(guī)范往簡單說其實(shí)就是三個方面:

  • 換行
  • 空格
  • 變量命名

放在 PHP 里面愚铡,還有一些附加的地方诡渴,比如關(guān)鍵字大小寫,語法糖的使用(array()[]等)的問題乔询。之前整理過 PSR 的標(biāo)準(zhǔn)谎砾,也找過 php-cs-fixer 這樣的工具逢倍。這些都是規(guī)范代碼的重要手段。有統(tǒng)一的標(biāo)準(zhǔn)景图,配合上工具的檢查较雕,形成統(tǒng)一的編碼約束不是什么難題。

沒有規(guī)范挚币,不同的人甚至同一個人在空格亮蒋、換行和命名上都有可能是十分隨意的。代碼一長妆毕,回使整個文件看起來無比雜亂慎玖。

典型的例子比如:ifelse的組合,可以寫出無數(shù)種風(fēng)格趁怔,比如:

<?php
# 單語句不寫大括號
if (true) doSomething();
# else 大括號換行 十分占篇幅
if (true)
{
    doSomething();
}
else {
    doElseThings();
}
# 此外還有關(guān)鍵字后不帶空格,隨意縮進(jìn)等等
# ...

再比如變量函數(shù)命名的問題上薪前,各種混搭風(fēng)格層出不窮:

<?php
# 全小寫
$someparam1 = null;
# 首字母下環(huán)線
$_some_param_1 = null;
# 某些庫的類痕钢,下劃線和大小寫混用
class Abstract_ClassA
{

}

這里并不探討各種寫法的優(yōu)缺點(diǎn),只是風(fēng)格需要保持統(tǒng)一序六,不要混用任连。

  1. 良好的編碼習(xí)慣
    --

如果你仔細(xì)看過 PSR 的標(biāo)準(zhǔn),可能也會注意到某些地方其實(shí)是標(biāo)準(zhǔn)無法涉及到的例诀。比如一個超長的表達(dá)式在什么時候換行随抠,如何縮進(jìn)等。

這里涉及到的就是編碼習(xí)慣的約束問題繁涂。

比如方法的鏈?zhǔn)秸{(diào)用的問題拱她,比如某些數(shù)據(jù)庫查詢的封裝:

<?php
# 不換行的情況下句子會很長
$result = $this->db->select('id')->where('a', 1)
    ->groupBy('a')->orderBy('id', 'DESC')->result();

# 這種情況下我建議是一個條件一行,保持縮進(jìn)
$result = $this->db->select('id')
    ->where('a', 1)
    ->groupBy('a')
    ->orderBy('id', 'DESC')
    ->result();

還有數(shù)組定義扔罪,某些數(shù)組成員字符串很長的情況下的寫法:

<?php
$array = ['abcdefg', 'acbdfeg', 'bcadgfe', 'cdadgef'];

# 如果成員太長秉沼,我建議拆解,這樣
$array = [
    'abcdefg',
    'acbdfeg',
    'bcadgfe',
    'cdadgef',
];
  1. 尋找最優(yōu)的寫法
    --

寫代碼的過程中,最優(yōu)的寫法和編碼習(xí)慣又不是同一件事情唬复。這里要說的指的是如何遵循 PHP 的語言特性或者框架的特征矗积,充分發(fā)揮語言和框架的能力來減少冗余。

比如在獲取前端傳入?yún)?shù)的時候敞咧,很多時候能見到這樣的代碼:

<?php
$param = isset($_POST['param']) ? $_POST['param'] : '';

更有甚者一些框架將前端傳入的參數(shù)封裝了一層棘捣,比如$this->request->data['param'],如果再去用isset或者array_key_exists判斷休建,整個獲取參數(shù)的語句就會變得很長乍恐。

某些情況下使用三元運(yùn)算符的時候需要注意?:是可以合并使用的。

其實(shí)我們應(yīng)該去嘗試封裝這種寫法测砂,防止同樣的變量出現(xiàn)在一個語句中多次的情況茵烈。對于默認(rèn)值的賦予,可以調(diào)研框架是否有封裝提供砌些,或者通過強(qiáng)制類型轉(zhuǎn)換的方式進(jìn)行呜投。

還有一種情況是條件和循環(huán)嵌套的時候。比如從數(shù)組里抽取某一個字段寄症,或者對某一個字段的值進(jìn)行處理的時候,善用array_map以及引用(&)往往能節(jié)省不少工作量矩动。但是使用的時候也要注意數(shù)組指針最后的位置有巧。

在根據(jù)條件返回結(jié)果時,需要善用return悲没。還有就是合理的抽象與封裝篮迎。

  1. review 自己的代碼
    --

除了以上提到的在日常開發(fā)中需要注意的一些問題。還有就是事后的工作示姿。

我相信很多人在看自己以前的代碼的時候都有一種其實(shí)有更好的寫法的感覺甜橱。隨著時間的推移自己總會有更豐富的閱歷,更多的想法栈戳。偶爾 review 自己的代碼也是對過去的總結(jié)岂傲,也許會有新的感知。

  1. 推廣給你的隊友
    --

團(tuán)隊項目中子檀,隊友的配合對整個代碼的規(guī)范起著決定性的作用镊掖。一個團(tuán)隊中有一個人不遵守規(guī)范,而又要到處修改代碼的時候褂痰,很快就能破壞到所有的約束亩进。

有統(tǒng)一的標(biāo)準(zhǔn),有良好的執(zhí)行力才能完成這件工作缩歪。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末归薛,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌主籍,老刑警劉巖习贫,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異崇猫,居然都是意外死亡沈条,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門诅炉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蜡歹,“玉大人,你說我怎么就攤上這事涕烧≡露” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵议纯,是天一觀的道長父款。 經(jīng)常有香客問我,道長瞻凤,這世上最難降的妖魔是什么憨攒? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮阀参,結(jié)果婚禮上肝集,老公的妹妹穿的比我還像新娘。我一直安慰自己蛛壳,他們只是感情好杏瞻,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著衙荐,像睡著了一般捞挥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上忧吟,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天砌函,我揣著相機(jī)與錄音,去河邊找鬼溜族。 笑死胸嘴,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的斩祭。 我是一名探鬼主播劣像,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼摧玫!你這毒婦竟也來了耳奕?” 一聲冷哼從身側(cè)響起绑青,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎屋群,沒想到半個月后闸婴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡芍躏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年邪乍,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片对竣。...
    茶點(diǎn)故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡庇楞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出否纬,到底是詐尸還是另有隱情吕晌,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布临燃,位于F島的核電站睛驳,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏膜廊。R本人自食惡果不足惜乏沸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望爪瓜。 院中可真熱鬧蹬跃,春花似錦、人聲如沸钥勋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽算灸。三九已至,卻和暖如春驻啤,著一層夾襖步出監(jiān)牢的瞬間菲驴,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工骑冗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赊瞬,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓贼涩,卻偏偏與公主長得像巧涧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子遥倦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,744評論 25 707
  • Welcome 目前網(wǎng)絡(luò)上充斥著大量的陳舊信息谤绳,讓PHP新手誤入歧途,傳播著錯誤的實(shí)踐和糟糕的代碼,這必須得到糾正...
    layjoy閱讀 21,663評論 7 118
  • 這只是一篇雜亂的隨筆缩筛。 去年回了趟貴陽消略,和高中的好哥們促膝長談,其實(shí)每年見面都在重復(fù)去年的話題瞎抛,聊聊學(xué)生時的糗事艺演,...
    羊酥閱讀 217評論 0 0
  • 開發(fā)中經(jīng)常會遇到子視圖不響應(yīng)父類手勢的問題,解決方法:
    西西西瓜sama閱讀 293評論 0 0