>백엔드 개발 >PHP 튜토리얼 >PHP 참조 변수 지식에 대한 자세한 설명

PHP 참조 변수 지식에 대한 자세한 설명

不言
不言원래의
2018-04-28 13:45:232534검색


이 글은 주로 PHP 참조 변수에 대한 자세한 지식을 소개합니다. 이제 특정 참조 값을 가지고 있습니다. 이제 도움이 필요한 친구들이 참조할 수 있습니다.

  • 개념: PHP에서 참조는 다른 이름을 사용한다는 의미입니다.

  • 정의 방법: PHP는 참조 변수를 정의하기 위해 '&'를 사용합니다.

  • 참조가 사용되지 않는 경우 변수는 COW(기록 중 복사) 메커니즘을 채택합니다. writing a가 인쇄되면 수정을 위해 메모리 사본이 복사됩니다. 예:

//定义一个变量
$a = range(0,1000);
var_dump(memory_get_usage()); //打印内存使用量
//定义一个变量b
$b = $a; //此时$b和$a 指向同一个内存空间
var_dump(memory_get_usage());
//当a或b发生写入时,才会复制一块内存进行修改
$a = range(0,1000);
var_dump(memory_get_usage());

실행 결과: 첫 번째와 두 번째 인쇄에서는 메모리 사용량이 비슷하지만 세 번째 인쇄에서는 상당한 변화가 있습니다. , 쓰기 작업을 수행할 때 메모리 사용량 복제가 발생했음을 나타냅니다.


  • 참조가 사용되면 변수는 동일한 메모리 공간을 가리키며 쓰기 작업 중에 변경되지 않습니다.

//定义一个变量
$a = range(0,1000);
var_dump(memory_get_usage()); //打印内存使用量
//定义一个变量b
$b = &$a; //将a的空间赋值给b,a与b指向同一空间
var_dump(memory_get_usage());
//当a或b发生写入时,内存不会发生复制
$a = range(0,1000);
var_dump(memory_get_usage());

실행 결과: 메모리가 크게 변경되지 않았습니다

검증을 위해 통과된 zval 변수 컨테이너

//通过zval变量容器打印
$a = range(0,3);
xdebug_debug_zval('a');//打印 指向内存空间的变量数,和是否被引用
$c =&$a;
xdebug_debug_zval('a');
$c = range(0,3);
xdebug_debug_zval('a');

실행 결과:

c에 쓸 때 여전히 메모리를 가리키는 2개의 변수가 있으며 쓰기 중 복사가 발생하지 않습니다



  • unset은 역참조만 하고 공간을 파괴하지 않습니다.

  • PHP에서는 객체 자체가 참조로 전달되므로 참조 기호를 사용할 필요가 없습니다

class Person{
    public $name  = "zhangsan";
}
$p1 = new Person();
xdebug_debug_zval('p1');

$p2 = $p1;
xdebug_debug_zval('p1');

$p2->name = "lesi";
xdebug_debug_zval('p1');


관련 권장 사항:

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


위 내용은 PHP 참조 변수 지식에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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