>백엔드 개발 >PHP 튜토리얼 >PHP 참조(&) 사용법

PHP 참조(&) 사용법

韦小宝
韦小宝원래의
2017-11-24 09:26:451949검색

PHP 에 인용된 의미는 다음과 같습니다. 서로 다른 이름이 동일한 변수 콘텐츠에 액세스합니다. PHPC 언어에서는 포인터에 차이가 있습니다. C 언어의 포인터는 변수의 내용이 메모리에 저장되는 주소를 저장합니다. php 인용(&) 사용법

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

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

참조별 호출 기능
참조별 호출 함수에 대해서는 자세히 설명하지 않겠습니다. 코드는 바로 아래에 나와 있습니다.

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

여기서 (1);을 테스트하면 오류가 발생한다는 점에 유의하세요. 이유를 직접 생각해 보세요
함수의 참조 반환
코드를 먼저 보세요

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
PHP 규정에 따라 $a=를 통해 얻는 것입니다. &test();는 함수 참조 return입니다. 참조 반환이란 무엇입니까?(PHP 설명서에 따르면 참조 반환은 참조가 바인딩되어야 하는 변수를 찾기 위해 함수를 사용할 때 사용됩니다.) 오랫동안 이해할 수 없었습니다
위의 예를 사용하여 설명해 보세요.
$a=test()로 함수를 호출하면 함수의 값이 $a에 할당될 뿐이며 $a에 대한 변경 사항은 $에 영향을 미치지 않습니다. 함수에서 b
그리고 $a=&test()로 함수를 호출하는 것입니다. 그 함수는 반환 $b에서 $b 변수의 메모리 주소와 $a 변수의 메모리 주소를 동일한 위치로 가리키는 것입니다. ($a=&b;) 따라서 $a를 변경하면 $b의 값도 동시에 변경되므로

$a=&test();
$a=5;

를 실행한 후 $b의 값은 5가 됩니다

이것은 모두가 이해할 수 있도록 하기 위한 것입니다. 실제로 함수의 참조 반환은

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의 기본값은 참조로 객체를 호출하는 것입니다. 객체의 복사본을 만들고 싶고 원본 객체의 변경 사항이 복사본에 영향을 미치지 않기를 바랍니다. 이를 위해 PHP는 clone이라는 특수 메서드를 정의합니다.
참조의 역할
프로그램이 비교적 큰 경우 비교하십시오. 동일한 객체를 참조하는 변수 객체를 사용한 후 수동으로 삭제하려면 개인적으로 "&" 방법을 사용하고 $var=null을 사용하여 삭제하는 것이 좋습니다.
다른 경우에는 php5의 기본 방법을 사용하세요. 또한, php5의 큰 배열의 경우 "&" 방법을 사용하여 전송하는 것이 좋습니다. 결국 메모리 공간이 절약됩니다.
Unreference참조 설정을 해제하면

변수 이름

과 변수 내용 사이의 바인딩이 끊어집니다. 이는 변수 내용이 삭제된다는 의미는 아닙니다. 예:

<?php
$a = 1;
$b =& $a;
unset ($a);
?>
는 $b를 설정 해제하지 않고 $a만 설정 해제합니다.

전역 참조

global $var를 사용하여 변수를 선언하면 실제로 전역 변수에 대한 참조가 생성됩니다. 이는 다음을 수행하는 것과 같습니다:

<?php
$var =& $GLOBALS["var"];
?>

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

$this


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


//또 다른 작은 에피소드입니다
PHP에서 주소의 포인팅(포인터와 유사) 기능은 사용자가 직접 구현하는 것이 아니라 Zend 코어에 의해 구현됩니다. on-write" 즉, 쓰기 작업이 발생하지 않는 한 동일한 주소를 가리키는 변수나 개체는 복사되지 않습니다.

일반 용어로

1: 다음 코드가 있는 경우

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

사실 $a와 $b는 이때 동일한 메모리 주소를 가리키고 $a와 $b는 서로 다른 메모리를 차지하지 않습니다
2: 위의 코드 위에 다음 코드를 추가합니다

$a="EFG";



$a, $b가 가리키는 메모리의 데이터를 다시 작성해야 하므로 이때 Zend 코어가 자동으로 판별하여 자동 생성합니다. $b에 대한 $a의 데이터 저장을 위해 메모리 조각을 복사하고 다시 적용합니다. ㅋㅋㅋ

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

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