>백엔드 개발 >PHP 튜토리얼 >PHP 참조 정의 및 참조 전달 매개변수 인스턴스 사용법에 대한 자세한 설명

PHP 참조 정의 및 참조 전달 매개변수 인스턴스 사용법에 대한 자세한 설명

伊谢尔伦
伊谢尔伦원래의
2017-07-17 16:52:572930검색

참조로 전달

함수가 매개변수 값을 수정할 수 있도록 참조로 변수를 함수에 전달할 수 있습니다. 구문은 다음과 같습니다.

<?php
function foo(&$var)
{
    $var++;
}
$a=5;
foo($a);
// $a is 6 here
?>

함수 호출에는 참조 기호가 없으며 함수 정의에만 참조 기호가 있습니다. 함수 정의만으로도 매개변수가 참조로 올바르게 전달되기에 충분합니다. 최신 버전의 PHP에서는 foo(&$a);에서 &를 사용하면 "참조에 의한 호출 시간"이 더 이상 사용되지 않는다는 경고가 표시됩니다.

다음은 참조로 전달될 수 있습니다.

foo($a)와 같은 변수
foo(new foobar())와 같은 새 문
다음과 같은 함수에서 반환된 참조:

<?php
function &bar()
{
    $a = 5;
    return $a;
}
foo(bar());
?>

자세한 설명은 참조로 반환을 참조하세요.
다른 표현식은 참조로 전달할 수 없으며 결과는 정의되지 않습니다. 예를 들어, 참조로 전달하는 다음 예는 유효하지 않습니다.

<?php
function bar() // Note the missing &
{
    $a = 5;
    return $a;
}
foo(bar()); // 自 PHP 5.0.5 起导致致命错误
foo($a = 5) // 表达式,不是变量
foo(5) // 导致致命错误
?>

이러한 조건은 PHP 4.0.4 이상 버전에서 사용할 수 있습니다.

참조 반환
참조 반환은 참조가 바인딩되어야 하는 변수를 찾기 위해 함수를 사용하려고 할 때 사용됩니다. 성능을 높이기 위해 반환 참조를 사용하지 마십시오. 엔진은 자체적으로 최적화할 만큼 똑똑합니다. 유효한 기술적 이유가 있는 경우에만 참조를 반환하십시오! 참조를 반환하려면 다음 구문을 사용하세요.

<?php
class foo {
    public $value = 42;
    public function &getValue() {
        return $this->value;
    }
}
$obj = new foo;
$myValue = &$obj->getValue(); // $myValue is a reference to $obj->value, which is 42.
$obj->value = 2;
echo $myValue;                // prints the new value of $obj->value, i.e. 2.
?>

이 예에서는 참조 구문이 사용되지 않은 것처럼 getValue 함수에서 반환된 개체의 속성에 복사되지 않고 값이 할당됩니다.

참고: 매개변수 전달과 달리 앰퍼샌드는 여기 두 곳 모두에서 사용해야 합니다. 이는 일반적인 복사본이 아닌 참조가 반환됨을 나타내고 $myValue가 일반적인 할당이 아닌 참조로 바인딩됨을 나타냅니다.

참고: return ($this->value);와 같은 함수에서 참조를 반환하려고 하면 참조된 변수가 아닌 표현식의 결과를 반환하려고 하기 때문에 작동하지 않습니다. 함수에서는 참조 변수만 반환할 수 있으며 다른 방법은 없습니다. 코드에서 동적 표현식이나 new 연산자의 결과를 반환하려고 하면 PHP 4.4.0 및 PHP 5.1.0부터 E_NOTICE 오류가 발생합니다.

<?php
function &test(){ 
    static $b=0;//申明一个静态变量 
    $b=$b+1; 
    echo $b; 
    return $b; 
}
$a=test();//这条语句会输出$b的值为1 
$a=5; $a=test();//这条语句会输出$b的值为2
$a=&test();//这条语句会输出$b的值为3 
$a=5; $a=test();//这条语句会输出$b的值为6
?>

$a=test()를 사용하여 함수를 호출하면 함수의 값만 $a에 할당되며 $a에 대한 변경 사항은 함수의 $b에 영향을 미치지 않습니다. 그러나 $a=&test( ) 메서드를 사용하면 됩니다. , 그 기능은 $b를 반환할 때 $b 변수의 메모리 주소와 $a 변수의 메모리 주소를 동일한 위치로 가리키는 것입니다. 이는 이 효과와 동등한 결과를 생성합니다($a=&b;). 따라서 값을 변경합니다. $a도 $b의 값을 변경하므로 $a=&test();를 실행한 후 $b의 값은 5가 됩니다.

참조 사용법에 따른 PHP 전달 매개변수

<?php
function add_some_extra(&$string) // 引入变量,使用同一个存储地址
{
  $string .= &#39;and something extra.&#39;;
}
$str = &#39;This is a string, &#39;;
add_some_extra($str);
echo $str;  // outputs &#39;This is a string, and something extra.&#39;
?>

출력:

This is a string, and something extra.

앰퍼샌드 제외

<?php
function add_some_extra($string)
{
  $string .= &#39;and something extra.&#39;;
}
$str = &#39;This is a string, &#39;;
add_some_extra($str);
echo $str;  // outputs &#39;This is a string, &#39;
?>

출력:

This is a string,

위 내용은 PHP 참조 정의 및 참조 전달 매개변수 인스턴스 사용법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.