簡體   English   中英

php返回或引用?

[英]php return or reference?

我有一些操作數組中數據的函數,例如unset_data()你傳遞的值和無限量的字符串args如:

unset_data( $my_array, "firstname", "password" );

它可以處理多維數組等,非常簡單。

但是這個函數應該使用對數組的引用並直接更改嗎?

或者我應該返回具有未設置值的新數組。

我永遠無法決定函數是否應該使用引用,

是否有特定情況或例子何時何地不使用它們?

謝謝

一般來說,最好按值返回而不是參考,因為:

  1. 這是最常見的使用模式(關於這個特定功能,請記住一點)
  2. 你可以自由創建調用鏈,例如你可以編寫array_filter(unset_data(...))
  3. 一般來說,沒有副作用的代碼(我以調用者可見的方式調用參數的變異產生副作用)更容易推理

大多數情況下,這些優勢是以耗盡額外內存為代價的。 除非你有充分的理由(或者更好,證明)相信額外的內存消耗將是一個問題,我的建議是只返回變異的值。

我會問自己函數的預期用例是什么。 典型的用例是否涉及保持原始數據的完整性並從中獲取新數據,或者是此函數的明確用例來修改數據?

假設md5會修改到位的數據,這會非常不方便,因為我通常希望保持原始數據的完整性。 所以我總是要這樣做:

$hash = $data;
md5($hash);

代替:

$hash = md5($data);

這是非常難看的代碼,由函數的API強加給你。

但是,對於未unset ,我不認為典型的用例是用於獲取新數據:

$arr = unset($arr['foo']);

這似乎非常笨重,也可能是性能損失。

我覺得你不應該/不應該回答這個問題 - 這完全取決於使用案例。

我個人的感覺是傾向於通過引用傳遞,以保持它的行為更符合本機unset() ,但如果您可能最終定期在調用函數之前必須復制數組,那么請使用回報價值。 引用方法的另一個優點是您可以返回一些其他信息以及實現對數組的修改 - 例如,您可以返回一個整數,該整數描述基於參數從數組中刪除了多少個值。

我不認為這里有任何選項的“最佳實踐”都有一個堅實的論據,所以簡短的答案是:

做任何你最熟悉的事情,以及任何允許你編寫最簡潔,可讀和自我記錄的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM