溫馨提示×

溫馨提示×

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

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

不得不知道的三種簡單實用的傳參方式

發(fā)布時間:2020-06-20 10:32:12 來源:網(wǎng)絡 閱讀:370 作者:eflypro小普 欄目:web開發(fā)

首先聲明,本干貨的觀點僅代表個人觀點,拿出來和大家嘮叨嘮叨。

最近在寫代碼的時候,發(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é)性,場景性的問題,不知道能不能明白個中意思呢?


向AI問一下細節(jié)

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

AI