您好,登錄后才能下訂單哦!
首先聲明,本干貨的觀點僅代表個人觀點,拿出來和大家嘮叨嘮叨。
最近在寫代碼的時候,發(fā)現(xiàn)了一個有趣的事情。就是我創(chuàng)建了一個新的函數(shù),但是因為各種需求,各種功能設計的原因,函數(shù)的形參數(shù)目達到了10多個之多。
而這個時候,由于本函數(shù)是一個公共函數(shù),所以被調(diào)用的地方十分多,當這個函數(shù)的形參需要增刪改的時候,可謂牽一發(fā)而動全身(當然,出現(xiàn)這種情況就應該想到是不是設計有問題了,耦合度這么高,但這次先不談這個),所以針對這種情況,我分別思考了3種最常用的傳參方式。
直接傳參,每個參數(shù)一個個的排好隊寫上,例如:
圖片來自睿江云計算
優(yōu)點:
1. 傳入的參數(shù)清晰,明確可以知道傳入?yún)?shù)有多少個,分別代表什么意思,從語義上一目了然。
2. 調(diào)用方便,調(diào)用者直接傳參,無需對參數(shù)進行處理加工。
3. 對新手來說更加友好,更容易理解。
缺點:
1. 形參太多,代碼失去了美感,太隨性了。
2. 當某個參數(shù)需要改動的時候,簡直是牽一發(fā)而動全身,比如$param5改為選填參數(shù),并且默認值為test:
圖片出自睿江云計算
缺點很明顯,這個時候由于php參數(shù)順序的問題,選填參數(shù)必須在最后,所以所有調(diào)用者都需要起碼把原來的param5去除,放在參數(shù)最后位置,改動代價高。
總結:當參數(shù)少的時候,可以使用直接一個個參數(shù)傳遞,這樣是最好的,但是當參數(shù)過多,或者改動需求大的時候,這種方法無疑是繁重的。
所以針對上面這種,當參數(shù)數(shù)量過多的時候,可以使用方法二:
把參數(shù)組合成一個數(shù)組的形式,整一個數(shù)組當做參數(shù)進行傳遞。例如:
圖片出自睿江云計算
優(yōu)點:
1. 代碼更加整潔了。
2. 代碼更加靈活,現(xiàn)在就算有一個參數(shù)需要改動,也無需修改函數(shù)的參數(shù),只需要在調(diào)用者處增加參數(shù)即可。
缺點:
1. 沒有了php的語法限制。例如沒有了string這種的類型限制,沒有了帶默認值的選填參數(shù)的語法限制。這樣子就需要你做多一層參數(shù)的檢查。
2. 參數(shù)可讀性差了。函數(shù)的數(shù)組里面有哪些參數(shù)是不能通過形參看出來的,需要查看調(diào)用者的數(shù)組組成。
總結:總體來說這種方法可以解決第一種傳參方式的弊端,但是也自身帶來了更加大的弊端,參數(shù)的限制需要另外增加一層鉤子去處理,可以說是性價比比較低的一種方法。
綜合上面兩種方法的利弊,我總結出第三種傳參方式:
傳遞一個數(shù)據(jù)結構對象當做參數(shù),例如:
圖片出自睿江云計算
優(yōu)點:
1. 參數(shù)為一個數(shù)據(jù)結構,保證數(shù)據(jù)的完整性。就是傳進來的數(shù)據(jù)結構必然能包含所需的參數(shù)。
2. 當參數(shù)需要更加或者減少的時候,只需要修改數(shù)據(jù)結構模型的對象屬性即可。
3. 把數(shù)據(jù)的控制和限制可以統(tǒng)一放在模型層進行處理。
缺點:
1.可能需要多個數(shù)據(jù)結構模型。
總結:總體來說這種方法可以比較全面的解決第一第二種方法的弊端,就是需要建立多種數(shù)據(jù)結構模型,增加了代碼量。
以上就是介紹的3種傳參的種類,這是一個細節(jié)性,場景性的問題,不知道能不能明白個中意思呢?
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。