這篇文章主要介紹了關於PHP引用變數知識詳解,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
//定義一個變數$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');