>  기사  >  백엔드 개발  >  참조 앰퍼샌드를 사용하는 방법은 무엇입니까? PHP 및 기호 사용 예에 ​​대한 자세한 설명

참조 앰퍼샌드를 사용하는 방법은 무엇입니까? PHP 및 기호 사용 예에 ​​대한 자세한 설명

伊谢尔伦
伊谢尔伦원래의
2017-06-21 10:47:582291검색

PHP 견적이란 무엇입니까? PHP

에서 의 의미는 서로 다른 이름이 동일한 variablecontent에 액세스한다는 것입니다. 즉, 변수나 함수 object 앞에 앰퍼샌드를 추가하는 것입니다. 등. ). 좋은 아이디어 같지 않나요? 아래에서 설명해 보겠습니다.

1. 변수 참조

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

예제 1:

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

예제 2:

<?php
$a = "date";
$b = &$a;
echo $a; // date
echo $b; // date
$b = "date1";
echo $a; // date1
echo $b; // date1
unset($a);
echo $b; // date1
?>

위의 두 예에서 $b라는 메모리 주소를 $b에 부여하는 것이 간단한 할당이 아니라는 것을 알 수 있습니다. 따라서 $b

에 대한 모든 작업은 $a

에도 영향을 미칩니다. 이를 표현하는 또 다른 방법은 $a에 별칭 $b을 추가하는 것입니다. 방금 삭제했습니다. 이 변수의 이름을 변경해도 변수의 내용은 삭제되지 않습니다. 별칭을 사용하여 이 변수의 내용을 계속 표시할 수 있습니다. (그림 참조)

2. 주소별 함수 호출

예 3:

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

방법은 여기

test(

1); 주소 전달이 없습니다.

3. 함수 참조 반환 php引用符号详解 - 蓝色花絮 - 永远的2009

함수 참조 반환은 주로 객체에서 사용됩니다. 여기서 이해하기 쉽습니다.

정적

변수를 예로 사용합니다. 예 4:

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

이 함수에 대해 댓글을 달아주세요. 출력이 있고 반환 값도 있습니다. $a = test();

test

함수의 반환 값

$b

$a

에 할당하는 것뿐입니다. 따라서 $a 작업이 무엇을 하든 $b에는 영향을 미치지 않습니다. $a = &test();함수는 메모리 주소 $b와 메모리 주소

$a

를 동일한 위치로 지정하여 $b =와 유사한 결과를 생성합니다. &$a 결과적으로 $a 값이 변경되면, 즉 5가 되면 $b 값에도 영향을 미치게 됩니다. 따라서 $a = &test(); $a = 5이 되고, 함수 처리 후에는 $b = 64가 출력됩니다. 예제 5:

<?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 

5. 引用的作用

如果程序比较大,引用同一个对象的变量比较多,并且希望用完 该对象后手工清除它,建议用 "&" 方式,然后用$var=null的方式清除。其它时候还是用php5的默认方式吧.

另外, php5中对于大数组的传递,建议用 "&" 方式毕竟节省内存空间使用。 

6. 取消引用

当你 unset 一个引用,只是断开了变量名和变量内容之间的绑定。这并不意味着变量内容被销毁了。

例如:

 <?php
$a = 1;
$b =& $a;
unset ($a);
?>

不会 unset $b,只是 $a

可以参看变量的引用那段

 7. global 引用

当用 global $var 声明一个变量时实际上建立了一个到全局变量的引用。

它等价于下面这段代码:

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

 这意味着,例如,unset $var 不会 unset 全局变量。 

8. $this

在一个对象的方法中,$this 永远是调用它的对象的引用。 

另外说明

php中对于地址的指向(类似指针)功能不是由用户自己来实现的,是由Zend核心实现的,php中引用 采用的是写时拷贝的原理,就是除非发生写操作,才会拷贝,其他操作,指向同一个地址的变量或者对象是不会被拷贝的。

假如,有以下代码:

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

이때 $a$b는 모두 같은 메모리 주소를 가리키고, $a$b는 서로 다른 메모리를 점유하고 있는 것이 아니라

위의 코드에 추가하면 다음과 같습니다. 코드를 따릅니다

$a="EFG";

여기서 "쓰기" 작업이 수행됩니다

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

위 내용은 참조 앰퍼샌드를 사용하는 방법은 무엇입니까? PHP 및 기호 사용 예에 ​​대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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