引用變量的考點
- 真題: 什么是引用變量? 在PHP當中,用什么符號定義引用變量?
- 考點:PHP的引用變量的概念及定義方式和PHP引用變量的原理
- 概念:在PHP中引用意味著用不同的名字訪問同一個變量內容。
- 定義方式:使用 & 符號
- 工作原理:
變量
// 定義一個變量
$a = range(0, 1000); // 創建一個0-1000的數組
var_dump(memory_get_usage()); // 查看內存使用情況
// 定義一個變量b, 將a的值賦給b
$b = $a; // $b 不會開辟空間,在 php 中使用 COW (Copy On Write)
var_dump(memory_get_usage()); // 查看內存使用情況
// 對a進行修改, 也就是進行了寫操作, 這時候$a重新開辟空間
$a = range(0, 1000);
var_dump(memory_get_usage()); // 查看內存使用情況
結果:
int(558352) int(558352) int(595272)
看變量容器
// 變量容器 - Zval
$a = range(0, 3);
xdebug_debug_zval('a'); // 需要安裝xdebug才能用這個函數
$b = $a;
xdebug_debug_zval('a');
$a = range(0, 3);
xdebug_debug_zval('a');
結果:
image.png
(refcount: 引用個數,is_ref: 是否是引用)
引用變量
$a = range(0, 1000); // 創建一個0-1000的數組
var_dump(memory_get_usage()); // 查看內存使用情況
$b = &$a;
var_dump(memory_get_usage());
$a = range(0, 1000);
var_dump(memory_get_usage()); // 查看內存使用情況
結果
int(558352) int(558376) int(558376) // 內存使用差不多
// 變量容器 - Zval
$a = range(0, 3);
xdebug_debug_zval('a'); // 需要安裝xdebug才能用這個函數
$b = &$a;
xdebug_debug_zval('a');
$a = range(0, 3);
xdebug_debug_zval('a');
看變量容器
image.png
關于 unset
$a = 1;
$b = &$a;
unset($b); // unset只會取消引用,不會銷毀空間
echo $a; // 空間沒有銷毀,$a 還是有值
image.png
對象(默認引用傳遞)
class Person
{
public $name = 'zhangsan';
}
$p1 = new Person;
xdebug_debug_zval('p1');
$p2 = $p1;
xdebug_debug_zval('p1');
$p2->name = 'lisi';
xdebug_debug_zval('p1');
image.png
舉一反三
image.png