2012-06-19 2 views
2

글쎄, 나는 참조가 무엇인지, 언제 사용되는지는 분명하다.참조로 전달 기능

실제로 얻을 수없는 한 가지는 참조로 함수를 전달하는 것이 더 나을 때입니다.

<?php 

//right here, I wonder why and when 
function &test(){ 

} 

<?php 

$numbers = array(2,3,4); 

foreach ($numbers as &$number){ 
    $number = $number * 2; 
} 

// now numbers is $numbers = array(4,6,8); 


$var = 'test'; 
$foo = &var; //now all changes to $foo will be affected to $var, because we've assigned simple pointer 



//Similar to array_push() 
function add_key(&$array, $key){ 
    return $array[$key]; 
} 

//so we don't need to assign returned value from this function 
//we just call this one 

$array = array('a', 'b'); 

add_key($array,'c'); 
//now $array is ('a', 'b', 'c'); 

참조를 사용하는 모든 혜택

참조로 함수를 전달하는 "의 사용을 제외하고, 나에게 명백하다, 내가 참조를 이해하는 방법과 같은 몇 가지 예제가있어, 혼란을 피하기 위해 "

질문 : 참조 기능을 통과 할 때 감사

+0

이 질문은 http://programmers.stackexchange.com/에 속해 있습니다. – acme

답변

3

- 용어가 "참조로 함수를 통과은"오해의 소지가 조금있다 :

function &test(){ 
    return /* something */; 
} 

을 사용하는 경우가 꽤있다가 보통의 참조와 거의 동일합니다. 즉 일반적인 것은 아닙니다.

$arr = array(
    array('name' => 'John', 'age' => 20), 
    array('name' => 'Mary', 'age' => 30), 
); 

function &findPerson(&$list, $name) { 
    foreach ($list as &$person) { 
     if ($person['name'] == $name) { 
      return $person; 
     } 
    } 
    return null; 
} 

$john = &findPerson($arr, 'John'); 
$john['age'] = 21; 

print_r($arr); // changing $john produces a visible change here 

See it in action : A (고안) 예를 들어, 배열의 요소를 발견하는 기능을 고려한다.

위의 예에서는 재사용 할 수있는 함수에서 데이터 구조 (실제로는이 배열보다 훨씬 복잡 할 수 있음) 내의 항목을 검색하는 코드를 캡슐화했습니다. 반환 값을 사용하여 원래 구조 자체를 수정하려는 경우 함수에서 참조를 반환하는 것 외에는 다른 옵션이 없습니다.이 특정 경우에는 배열에 인덱스를 반환 할 수도 있지만 인덱스가없는 구조에 대해 생각할 수 있습니다 예 : 그래프).

+0

좋은 설명! – acme

1

을 (내가 여기에 답을 검색 한, 그러나 아직도이 일을 파악 할 수 없음) Returning References을 의미합니까?

간단한 예입니다 : 이것은 returns by reference하는 기능입니다

function &test(&$a){ 
    return $a; 
} 

$a = 10; 
$b = &test($a); 
$b++; 

// here $a became 11 
var_dump($a);