這篇文章主要介紹了關於PHP引用變數知識詳解,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
概念:在PHP中引用意味著用不同的名字存取同一個變數內容;
定義方式:PHP使用'& '定義引用變數;
當不使用引用時,變數採取寫入時複製機制機制(COW):寫入時會複製一份記憶體進行修改,例如
//定义一个变量 $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進行寫入操作時,記憶體發生了複製。
而當時用引用時變數將指向同一記憶體空間,寫入操作時不會改變
//定义一个变量 $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個變數指向內存,未發生寫入時複製
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中文網其他相關文章!