이 글은 주로 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!