php變數在賦值的時候是增加的參考計數,并不是又創建了一塊記憶體空間
但是當新的變數值變更時 , 值從新賦予新的值時 , 就會減掉剛才的參考計數,并且從新創建記憶體空間.
上面的內容是顯而易見的,重新賦值自然會重新創建記憶體空間,但是有一種情況也會發生這樣的事 , 那就是在使用到參考符&的時候 , 也會發生復制.
例如下面的代碼:
<?php $a="shihan"; $b=$a; $c=$a; xdebug_debug_zval('a','b');
a: (refcount=3, is_ref=0)='shihan'
b: (refcount=3, is_ref=0)='shihan'
$a="shihan"; $b=&$a; $c=$a; xdebug_debug_zval('a','b');
a: (refcount=2, is_ref=1)='shihan'
b: (refcount=2, is_ref=1)='shihan'
下面這個$b=&$a會產生復制 , 當進行函式傳參時 , 內容占用增大
<?php $a="shihan"; $b=&$a; $c=$a; function test2($d){} test2($b); xdebug_debug_zval('a','b'); var_dump(memory_get_usage());//633208 <?php $a="shihan"; $b=$a; $c=$a; function test2($d){} test2($b); xdebug_debug_zval('a','b'); var_dump(memory_get_usage());//633128
當沒有在函式內部更改這個值的需求時 , 不要用參考
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/79315.html
標籤:PHP
上一篇:PHP嚴重致命錯誤處理:php Fatal error: Cannot redeclare class or function【轉】
