>  기사  >  백엔드 개발  >  PHP에서 참조 기호(&) 사용에 대한 자세한 설명

PHP에서 참조 기호(&) 사용에 대한 자세한 설명

墨辰丷
墨辰丷원래의
2018-05-29 17:35:381547검색

PHP의 참조는 변수, 함수, 객체 등 앞에 & 기호를 추가하는 것입니다. PHP에서 참조는 다른 이름이 동일한 변수 내용에 액세스한다는 것을 의미합니다. PHP가 필요한 친구의 참조를 사용하는 방법은 다음과 같습니다. 참조할 수 있습니다

C언어의 포인터와는 다릅니다. C언어의 포인터는 변수의 내용이 메모리에 저장되는 주소 변수에 대한 참조를 저장합니다.

PHP의 참조를 사용하면 두 개의 변수를 사용하여 동일한 내용을 가리킬 수 있습니다.

$a="ABC"; 
$b =&$a; 
echo $a;//这里输出:ABC 
echo $b;//这里输出:ABC 
$b="EFG"; 
echo $a;//这里$a的值变为EFG 所以输出EFG 
echo $b;//这里输出EFG

함수 호출

주소별 통화에 대해서는 자세히 설명하지 않겠습니다. 코드는 바로 아래에 나와 있습니다.

<?php
function test(&$a) {
  $a = $a + 100;
}
$b = 1;
echo $b; //输出1
test($b); //这里$b传递给函数的其实是$b的变量内容所处的内存地址,通过在函数里改变$a的值 就可以改变$b的值了
echo "<br>";
echo $b; //输出101

?>

여기서 test(1);을 사용하면 오류가 발생한다는 점에 유의하세요. 그 이유에 대해서는 직접

함수의 참조 반환

코드를 먼저 살펴보세요

<?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()는 실제로 함수 참조가 아닙니다. 이는 일반적인 함수 호출과 다르지 않습니다. 이유는 다음과 같습니다. PHP는 함수의 참조 반환을 $a=&test();를 통해 얻도록 규정합니다. return? (PHP 매뉴얼에 따르면 참조 return은 함수를 사용하여 참조를 찾을 때 사용됩니다. 변수에 바인딩된 경우여야 합니다.) 이런 말도 안되는 소리 때문에 오랫동안 이해할 수 없었습니다


위의 예를 사용하여 설명하면


$a=test()를 사용하여 함수를 호출하는 것입니다. 이는 함수의 값을 $a에 할당할 뿐이며 $a에 대한 변경 사항은 $b에 영향을 주지 않습니다. 이 함수는 $a=&test()를 통해 함수를 호출할 때 $b를 반환하는 $b 변수의 메모리 주소를 $a 변수의 메모리 주소가 동일한 위치를 가리키는지 비교하는 것입니다. 등가 효과($a=&b;) 따라서 $a 값을 변경하면 $b 값도 변경되므로


$ a=&test()

$a=5; 즉, $b의 값은 5가 됩니다

이것은 정적 변수를 사용하기 전에 함수의 참조 반환을 모두가 이해할 수 있도록 하기 위한 것입니다. 실제로 함수의 참조 반환은 객체에서


의 참조입니다. the object


<?php
class a {
  var $abc = "ABC";
}
$b = new a;
$c = $b;
echo $b->abc; //这里输出ABC
echo $c->abc; //这里输出ABC
$b->abc = "DEF";
echo $c->abc; //这里输出DEF

?>

위 코드는 PHP5의 실행 효과입니다

PHP5에서는 참조를 통해 객체 복사가 이루어집니다. 위 열에서 $b=new a; $c=$b; 는 실제로 $b=new a; $c=&$b;

PHP5의 기본값은 참조로 객체를 호출하는 것입니다. 객체의 A 복사본을 만들고 싶고, 원본 객체의 변경 사항이 복사본에 영향을 미치지 않기를 바랍니다. 이를 위해 PHP는 __clone이라는 특수 메서드를 정의합니다. 프로그램의 용량이 상대적으로 크므로, 동일한 객체를 참조하는 변수가 많아 객체를 사용한 후 수동으로 지우고 싶다면 개인적으로 "&" 방식을 사용한 후 $var=null 을 사용하여 지우는 것을 추천합니다. 그 외의 경우에는 php5의 기본 방법을 사용하세요. 또한 php5에서 큰 배열을 전송하려면 "&" 방법을 사용하는 것이 좋습니다. 이는 결국 메모리 공간을 절약하기 때문입니다.


Unreference

참조 설정을 해제하면 변수 이름과 변수 콘텐츠 간의 바인딩이 끊어집니다. 이는 변수 내용이 삭제된다는 의미는 아닙니다. 예를 들어,

$a = 1; 
$b =& $a; 
unset ($a);


은 $b를 설정 해제하지 않고 $a만 설정 해제합니다.

전역 참조

global $var를 사용하여 변수를 선언하면 실제로 전역 변수에 대한 참조가 생성됩니다.

$var =& $GLOBALS["var"];


이는 예를 들어 unset $var가 전역 변수를 설정 해제하지 않는다는 것을 의미합니다.


$this

객체의 메서드에서 $this는 항상 이를 호출하는 객체에 대한 참조입니다.

//여기 또 다른 작은 에피소드가 있습니다


PHP에서 주소의 포인팅(포인터와 유사) 기능은 사용자가 직접 구현하는 것이 아니라 Zend 코어에 의해 구현됩니다. -write" 쓰기 작업이 발생하지 않는 한 동일한 주소를 가리키는 변수나 개체는 복사되지 않는 것이 원칙입니다. ㅋㅋㅋ 다른 추억 2 :위 코드에 다음 코드를 추가하면

$a="ABC"; 
$b=$a;

위 내용이 이 글의 전체 내용이므로 모든 분들의 공부에 도움이 되길 바랍니다.



관련 추천:


PHP

네임스페이스 가입의 이점은 자동 로딩에 편리합니다.

PHP

오류 수준 설정 및 원리 분석

php 프로세스 제어 break 문

php 흐름 제어 계속 문

위 내용은 PHP에서 참조 기호(&) 사용에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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