2011-08-15 6 views
1

일단 함수 내에서 변수를 참조로 전달하면 나중에 액세스 할 때 여전히 참조 또는 ..입니까?참조 또는 변수?

예 : 기능 two();에서

function one(){ 
    $variables = array('zee', 'bee', 'kee'); 
    $useLater =& $variables; 
    two($variables); 
} 

function two($reference){ 
    foreach($reference as $variable){ 
     echo 'reference or variable, that is the question...'; 
    } 
} 

는 변수 (I 추측 메모리 ..) 미리 설정된 $ 변수에 대한 참조 또는 생성되는 새로운 요소있어?

더하기, 변수가 참조로 전달되는지 여부를 확인하는 방법이 있습니까? (예 : is_reference();)

+1

답이 무엇이든간에 : 통화 시간 기준의 전달은 사용되지 않습니다. –

+0

@Felix, "pass by reference"의 대체품은 무엇입니까? – jolt

+0

이것을 아주 쉽게 테스트 할 수 있습니다, OP. –

답변

1

변수는 &$foo을 사용하여 명시 적으로 참조로 전달하는 경우에만 현재 버전의 PHP에서 참조로 전달됩니다.

동일하게 변수를 새로운 변수 (예 : $foo = $bar)로 선언 할 때 $ foo는 값이 변경 될 때까지 $ bar에 대한 참조가됩니다. 그런 다음 그것은 새로운 사본입니다.

여기에서 참조 번호을 감지하는 방법이 많이 있습니다. 그 중 일부를 확인해보십시오. (왜 이렇게해야하는지 알 수는 없지만 여전히 있습니다.)

http://www.php.net/manual/en/language.references.spot.php

2

위에서 정의한대로 함수 2는 $refernce의 새 복사본을 사용합니다. 당신이 함수에 대한 매개 변수가 참조되고 싶다면 당신도, 거기 &를 작성해야,

function two(&$ref) { 
    //> Do operation on $ref; 
} 
0

:

는이 같은 기능이를 정의 할 필요가 원래 변수를 사용합니다.

개체 만 예외가되어야합니다.

1

가변.

function one(){ 
    $variables = array('zee', 'bee', 'kee'); 
    $useLater =& $variables; 
    two($variables); 
    var_dump($variables); 
} 

function two($reference){ 
    $reference = array(); 
} 

그렇게 one()에서 변경 diesn't two()에 변경

array(3) { [0]=> string(3) "zee" [1]=> string(3) "bee" [2]=> string(3) "kee" } 

을 제공합니다, 그래서 변수 : 찾습니다.

1

개의 전송 변수()는 새로운 요소이다. 변수의 참조에 액세스하려면 두 (& $ variable);

두 번째 쿼리에 대한 대답으로 변수가 참조인지 테스트 할 표준 함수는 없지만 아래 링크는 변수가 참조인지 여부에 대한 몇 가지 포인터를 제공해야합니다.

PHP: check if object/array is a reference

0

그냥 자신을 위해 그것을 밖으로 시도 :

<?php 

$variables = array('zee', 'bee', 'kee'); 
one($variables); 

foreach($variables as $variable2){ 
     echo "original: ".$variable2."<br>"; 
    } 


function one(&$variables){ 

    $useLater =& $variables; 
    two($variables); 

    foreach($variables as $variable2){ 
     echo "function one: ".$variable2."<br>"; 
    } 

} 

function two(&$reference){ 
    foreach($reference as $variable){ 
     echo "function two: ".$variable."<br>"; 
    } 
    $reference[0] = 'lee'; 
} 

?> 

지금 -sign &을 떠나 무슨 일이 일어 나는지. 문제의 변수를 전달할 때마다 PHP에 명시 적으로 알려줘야합니다.