1. 程式人生 > >不得不知道的三種簡單實用的傳參方式

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

首先宣告,本乾貨的觀點僅代表個人觀點,拿出來和大家嘮叨嘮叨。

最近在寫程式碼的時候,發現了一個有趣的事情。就是我建立了一個新的函式,但是因為各種需求,各種功能設計的原因,函式的形引數目達到了10多個之多。

而這個時候,由於本函式是一個公共函式,所以被呼叫的地方十分多,當這個函式的形參需要增刪改的時候,可謂牽一髮而動全身(當然,出現這種情況就應該想到是不是設計有問題了,耦合度這麼高,但這次先不談這個),所以針對這種情況,我分別思考了3種最常用的傳參方式。


    第一種


直接傳參,每個引數一個個的排好隊寫上,例如:

 

優點:

1. 傳入的引數清晰,明確可以知道傳入引數有多少個,分別代表什麼意思,從語義上一目瞭然。

2. 呼叫方便,呼叫者直接傳參,無需對引數進行處理加工。

3. 對新手來說更加友好,更容易理解。


缺點:

1. 形參太多,程式碼失去了美感,太隨性了。

2. 當某個引數需要改動的時候,簡直是牽一髮而動全身,比如$param5改為選填引數,並且預設值為test:


      

                                圖片出自睿江雲端計算

缺點很明顯,這個時候由於php引數順序的問題,選填引數必須在最後,所以所有呼叫者都需要起碼把原來的param5去除,放在引數最後位置,改動代價高。

總結:當引數少的時候,可以使用直接一個個引數傳遞,這樣是最好的,但是當引數過多,或者改動需求大的時候,這種方法無疑是繁重的。


所以針對上面這種,當引數數量過多的時候,可以使用方法二:


    第二種


把引數組合成一個數組的形式,整一個數組當做引數進行傳遞。例如:

     

                            圖片出自睿江雲端計算

優點:

1. 程式碼更加整潔了。

2. 程式碼更加靈活,現在就算有一個引數需要改動,也無需修改函式的引數,只需要在呼叫者處增加引數即可。


缺點:

1. 沒有了php的語法限制。例如沒有了string這種的型別限制,沒有了帶預設值的選填引數的語法限制。這樣子就需要你做多一層引數的檢查。

2. 引數可讀性差了。函式的數組裡面有哪些引數是不能通過形參看出來的,需要檢視呼叫者的陣列組成。

總結:總體來說這種方法可以解決第一種傳參方式的弊端,但是也自身帶來了更加大的弊端,引數的限制需要另外增加一層鉤子去處理,可以說是價效比比較低的一種方法。


綜合上面兩種方法的利弊,我總結出第三種傳參方式:


      第三種


傳遞一個數據結構物件當做引數,例如:

     

                                                            圖片出自睿江雲端計算

優點:

1. 引數為一個數據結構,保證資料的完整性。就是傳進來的資料結構必然能包含所需的引數。

2. 當引數需要更加或者減少的時候,只需要修改資料結構模型的物件屬性即可。

3. 把資料的控制和限制可以統一放在模型層進行處理。


缺點:

1.可能需要多個數據結構模型。

總結:總體來說這種方法可以比較全面的解決第一第二種方法的弊端,就是需要建立多種資料結構模型,增加了程式碼量。


以上就是介紹的3種傳參的種類,這是一個細節性,場景性的問題,不知道能不能明白箇中意思呢?