2012-06-30 3 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

프로그래머에 대한보다 자세한 분석적 답변을 얻을 수 있습니다 .stackexchange.com. 분명한 점은 이것이 훌륭한 질문이라고 생각합니다. –

+0

또는 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

관련 문제