(PHP의 참조(즉, 변수나 함수, 객체 앞에 & 기호를 추가하는 것) // 가장 중요한 것은 참조 변수를 삭제하는 것인데, 참조 변수에 접근할 수 없는데 내용이 안 나오네요. 이름의 동일한 변수 내용에 액세스합니다.
변수 인용
Php를 사용하면 두 개의 변수를 사용하여 동일한 내용의 주소를 가리킬 수 있습니다.
<?php$a="ABC"; $b =&$a; echo $a;//这里输出:ABC echo $b;//这里输出:ABC $b="EFG"; echo $a;//这里$a的值变为EFG 所以输出EFG echo $b;//这里输出EFG ?>함수 아래에 코드가 제공됩니다.
<?phpfunction test(&$a){ $a=$a+100; } $b=1; echo $b;//输出1 test($b); //这里$b传递给函数的其实是$b的变量内容所处的内存地址,通过在函数里改变$a的值 就可以改变$b的值了 echo "<br>"; echo $b;//输出101?>여기서 test(1);을 사용하면 오류가 발생한다는 점에 유의해야 합니다. 이유는 다음과 같습니다. PHP는 전달된 참조가 상수일 수 없다고 규정합니다(오류 메시지를 볼 수 있습니다).
먼저 코드를 살펴보겠습니다
<?phpfunction &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()를 통해 함수를 호출할 때 해당 함수는 다음과 같습니다.
에서 $b 변수를 반환하려면 $a 변수의 메모리 주소와 메모리 주소가 동일한 위치를 가리키므로 동일한 효과가 발생합니다($a=&b;). 따라서 $a
이것은 함수의 참조 반환을 모두가 이해할 수 있도록 하기 위한 것입니다. 실제로 정적 변수를 사용하기 전 함수의 참조 반환은 객체에서 주로 사용됩니다 객체 참조
<?phpclass 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 참조 설정을 해제하면 변수 이름과 변수 내용 사이의 바인딩이 끊어집니다. 이는 변수 내용이 삭제된다는 의미는 아닙니다. 예를 들어:
--------- --- ---------------------------------- --- -------
$b는 설정 해제되지 않고 $a만 설정 해제됩니다. function quoteTest(){ global $var; //$var = &$GLOBALS['var'] $var = 5; //둘 다 동일한 메모리 내용을 가리키기 때문입니다.}$var=1;quoteTest () ;echo $var; //결과 5------------------------- -- ------------------------------------------------ -- ---'&' 이것은 참조입니다 전역 참조 전역 $var로 변수를 선언하면 실제로 전역 변수에 대한 참조가 설정됩니다. 이는 다음과 같습니다: 이는 예를 들어 unset $var가 전역 변수를 설정 해제하지 않는다는 것을 의미합니다. $this 객체의 메서드에서 $this는 항상 이를 호출하는 객체에 대한 참조입니다. //여기 또 다른 작은 에피소드가 있습니다. PHP의 주소 지정(포인터와 유사) 기능은 사용자가 직접 구현하는 것이 아니라 Zend 코어에서 구현하는 것입니다. -write", 즉 쓰기 작업이 발생하지 않는 한 동일한 주소를 가리키는 변수나 개체는 복사되지 않습니다. 일반인의 관점에서 1: 다음 코드가 있는 경우 [php] $a="ABC"; $b=$a [/php] 사실 이때 $a와 $b는 모두 동일한 메모리를 가리킵니다. $a와 $b가 아닌 주소가 다른 메모리를 차지합니다2: 위 코드에 다음 코드를 추가하면 [php] $a="EFG" [/php] $a 및 $b가 가리키는 메모리의 데이터가 다시 작성되므로 Zend 코어는 자동으로 $b에 대한 $a의 데이터 복사본을 결정하고 자동으로 생성하고 저장용 메모리 조각을 다시 신청합니다
위 내용은 PHP에서 & 기호의 역할 - 변수 참조, 함수 참조, 객체 참조의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!