但是我的遭遇如下:
下面這個函數告訴我們兩個使用者是否可以交流。
function a_can_talk_to_b($a, $b) { return (...) ? true : false;}
現在,事情變了,除了告知能不能交流外,還要告知為什麼,即希望函數調用在返回false能告訴調用方為什麼是false。
我用了下面這種方式:(給函數傳一個傳引用參數why,然後返回出來)
function a_can_talk_to_b($a, $b, &$why) { if (...) { return true; } else { $why = '...'; return false; }}
還有另一種就是返回一個array:(但是這樣傳回值就不是簡單的布爾值了,會改變函數調用的方式)
function a_can_talk_to_b($a, $b) { if (...) { $why = '...'; return array('status' => true, 'why' => $why); } else { $why = '...'; return array('status' => false, 'why' => $why); }}
除了這兩種還有別的方式嗎?
回複內容:
但是我的遭遇如下:
下面這個函數告訴我們兩個使用者是否可以交流。
function a_can_talk_to_b($a, $b) { return (...) ? true : false;}
現在,事情變了,除了告知能不能交流外,還要告知為什麼,即希望函數調用在返回false能告訴調用方為什麼是false。
我用了下面這種方式:(給函數傳一個傳引用參數why,然後返回出來)
function a_can_talk_to_b($a, $b, &$why) { if (...) { return true; } else { $why = '...'; return false; }}
還有另一種就是返回一個array:(但是這樣傳回值就不是簡單的布爾值了,會改變函數調用的方式)
function a_can_talk_to_b($a, $b) { if (...) { $why = '...'; return array('status' => true, 'why' => $why); } else { $why = '...'; return array('status' => false, 'why' => $why); }}
除了這兩種還有別的方式嗎?
這樣做可以啊,從語言的角度來說沒有任何問題
樓主是不是想問這種做法好不好?
我的建議是,最好別這樣,因為每次都還要多傳一個跟邏輯似乎毫無關係的參數,使用的人會覺得很奇怪。
如果可以的話,拋出exception吧,你可以通過catch Exception來擷取意外資訊
這種設計需求本身就是不合理的。
一個函數,就幹一件事情。
如果要幹多個事情,分開函數來做。
非要放在一個函數裡面,一開始就返回數組吧。沒別的招。
return {'canTalk'=>true,'why'=>'balabala...'}
挺好挺正確,如果你別的地方也回用到why,那也有必要單獨提出來形成一個封裝。
如果你不在乎返回true or false的便捷
可以返回CODE
再根據CODE=>MESSAGE表來找出why
返回數組、JSON對象都可以解決你的問題