2012-06-30 127 views
4

例子:使用引用創建變量是個好主意嗎?

function create_pets(&$cats, &$dogs){ 
$dogs = get_dogs(); 
$cats = get_cats(); 
} 

所以我想這樣稱呼它:

function foo(){ 
    create_pets($cats, $dogs); 

    // here use $cats and $dogs variables normally 
} 

我知道我可以只分配一個新的varible這些吸氣功能之一的返回值,但是這僅僅是一個例。在我的情況下,不僅僅是一個吸氣...

+2

在這個例子中,你顯示ID說不。但這取決於情況。 – Joel

+0

您可能會在programmers.stackexchange.com上獲得更詳細的分析答案。儘管如此,我認爲這是一個很好的問題。 –

+0

or codereview.stackexchange.com –

回答

1

大家都說的答案是「取決於」。在你的具體例子中,一個「創建」函數,代碼不太明顯的工作和維護,因此避免這種模式可能是一個好主意。

但這裏是個好消息,有做你正在嘗試做的是保持簡單和緊湊,同時不使用引用的方法:

function create_pets(){ 
    return array(get_dogs(), get_cats()); 
} 


function foo(){ 
    list($dogs, $cats) = create_pets(); 
    //here use $cats and $dogs variables normally 
} 

正如你看到的,你可以簡單地返回一個數組,使用the list language construct可以在單行中獲取各個變量。說明這裏發生的事情也更容易,create_pets()顯然會返回新的$ cats和$ dogs;除非直接檢查create_pets(),否則之前使用引用的方法沒有說明這一點。

雖然你不會發現使用任何一種方法的性能差異,兩者都可以工作。但是你會發現,編寫易於遵循和編寫代碼的代碼最終會走很長的路。

1

這取決於情況。大多數情況下,您通常會按值調用變量,但在某些情況下,如果要修改變量內容而不更改代碼其他部分中的變量值,則通過引用調用是個不錯的主意。其他方面,如果你只想要實際的內容,只有實際的內容,然後按價值調用是一個更好的主意。這個鏈接很好地解釋了它。 http://www.exforsys.com/tutorials/c-language/call-by-value-and-call-by-reference.html

+0

好吧,這不是那種情況。我只是喜歡create(var1,var2):)的語法,它使代碼稍微更緊湊 – Alex

相關問題