2010-07-15 2 views
19

함수 이름 앞에 &은 무엇을 의미합니까?함수 이름 앞에 &는 무엇을 의미합니까?

즉, $result은 값이 아닌 참조로 반환됩니다. 그렇다면 올바른가요? 함수가 종료되면 사라지는 것처럼 로컬 변수에 대한 참조를 반환 할 수 없다는 것을 기억합니다. 또한

function &query($sql) { 
// ... 
$result = mysql_query($sql); 
return $result; 
} 

어디 이러한 구문은 연습에 사용됩니까?

답변

7

$result은 값이 아닌 참조로 반환됩니다.

예.

또한 이러한 구문은 연습에서 사용됩니까?

이것은 기본적으로 객체가 값으로 전달 된 PHP 4 스크립트에서 더 많이 발생합니다.

+0

-1은 $ result를 나타 내기 위해 함수 내에 만 존재하므로 쓸모가 없습니다. – NikiC

+0

@nikic : 나는 내 대답을 뒤로 굴렸다. – BoltClock

+0

오케이. 이제는 PHP 5에서 객체가 가치에 의해 전달되지 않는다는 것을 -1로 알려줍니다 ... – NikiC

6

질문의 두 번째 부분에 대답하려면 여기에 내가 그것을 사용해야했던 장소가 있습니다. Magic getters! 내가 거기 &을 사용하지 않았다면

class FooBar { 
    private $properties = array(); 

    public function &__get($name) { 
     return $this->properties[$name]; 
    } 

    public function __set($name, $value) { 
     $this->properties[$name] = $value; 
    } 
} 

이 가능하지 않을 것이다 :

$foobar = new FooBar; 
$foobar->subArray = array(); 
$foobar->subArray['FooBar'] = 'Hallo World!'; 

대신 PHP는 '간접적으로 과부하 속성을 수정할 수 없습니다'같은 것을 말하는 오류가 발생합니다.

좋아, 이것은 아마도 PHP에서 잘못된 디자인을 얻는 해킹 일 뿐이지 만 여전히 유용합니다.

하지만 솔직히 나는 다른 예를 생각할 수 없습니다. 하지만 드문 유스 케이스가 있다고 생각합니다 ...

4

즉, $result은 값이 아닌 참조로 반환됩니다.

아니요. 차이점은 입니다.은 참조로 반환 될 수 있습니다. 예를 들어 : 또한

<?php 
function &a(&$c) { 
    return $c; 
} 
$c = 1; 
$d = &a($c); 
$d++; 
echo $c; //echoes 2 

을 같은 구문이 연습에 익숙해 않는 경우 :

<?php 
function &a(&$c) { 
    return $c; 
} 
$c = 1; 
$d = a($c); 
$d++; 
echo $c; //echoes 1, not 2! 

참조로 돌아가려면 당신은해야 할 것?

실제로는 호출자가 호출자에게 알리지 않고 호출 수신자가 소유 한 데이터를 조작하게 할 때마다 사용합니다. 이것은 캡슐화를 위반하기 때문에 거의 사용되지 않습니다. 반환 된 참조를 원하는 값으로 설정할 수 있습니다. 피 호출자는이를 검증 할 수 없습니다.

nikic은 이것이 실제로 사용되는 경우의 훌륭한 예를 제공합니다.

+0

함수 이름 앞에 &를 사용하여 함수가 정의되지 않은 경우 값 대신 참조로 변수를 반환 할 수 있습니까? –

+0

@KorayTugay no. – Artefacto

관련 문제