unset 與引用關係 總結

2021-07-05 08:27:08 字數 1835 閱讀 5626

引用有兩個好處,乙個是記憶體省,乙個是速度快。unset只有個好處,就是省記憶體。

unset(&$hh) 只是斷開了變數名和變數值之間的繫結。這並不意味著變數內容被銷毀了。

$a="dgs";

$b= &$a;

unset($b);

echo$a;// shows "dgs

"

對於unset:

1. 該函式只有在變數值所佔空間超過256位元組長的時候才會釋放記憶體

2. 只有當指向該值的所有變數(比如有引用變數指向該值)都被銷毀後,位址才會被釋放(也要執行1的判斷)

也就是檢查有無其他變數繫結,有的話就不會釋放了。就像這個例子:

$a="hihaha";

$b= &$a;

unset($b);

echo$a;// shows "hihaha"

所以建議用 $變數=null 的方法來釋放其記憶體。

unset全域性變數在使用者函式中只能銷毀區域性變數,並不能銷毀全域性變數。(從php4開始unset已經不再是乙個函式了,而是乙個語句)。如果需要銷毀全域性變數的應該如何做呢?也很簡單,用$globals陣列來實現。

以下是unset() 和引用關係 的例子:

<?php

//if you do:

$a="hihaha";

$b= &$a;

$c="eita";

$b=$c;

echo$a;// shows "eita"

$a="hihaha";

$b= &$a;

$c="eita";

$b= &$c;

echo$a;// shows "hihaha"

$a="hihaha";

$b= &$a;

$b=null;

echo$a;// shows nothing (both are set to null)

$a="hihaha";

$b= &$a;

unset($b);

echo$a;// shows "hihaha"

$a="hihaha";

$b= &$a;

$c="eita";

$a=$c;

echo$b;// shows "eita"

$a="hihaha";

$b= &$a;

$c="eita";

$a= &$c;

echo$b;// shows "hihaha"

$a="hihaha";

$b= &$a;

$a=null;

echo$b;// shows nothing (both are set to null)

$a="hihaha";

$b= &$a;

unset($a);

echo$b;// shows "hihaha"

?>

引用引數傳遞

function foo ( &$var )

foo ($a); // 注意在函式呼叫時沒有引用符號 - 只有函式定義中有。光是函式定義就足夠使引數通過引用來正確傳遞了

引用傳遞返回函式值

function &init_users()

//使用引用返回,必須在兩個地方都用&符號

$user = & init_users();

function &init_users()

const與引用的關係

1.使用 int i 6 const int a i i 9 在此時,a與i是同乙個變數,名稱不同 改變i的值,而不是用a改變 輸出 a 9,i 9 如果使用a改變值則編譯錯誤 2.當引用物件型別不同時 double i 6.79 const int a i i 9.67 輸出 a 6,i 9.67...

值型別與引用型別關係

引用型別包括 類 class 介面 inte ce 陣列 array 委託 delegate object和string。其中草藥object和string是兩個比較特殊的型別。string型別是乙個從object類直接繼承的密封型別,不能再被繼承,其實例表示unicode字串。可以把值型別與引用型...

Js的引用關係示例和總結

三種引用 指標引用 關係,借助引用關係可以形成複雜的鏈關係,巧妙借助鏈關係可以實現收放自如,形散神不散的神奇效果,jquery就是其中一例 1.物件指向屬性 2.a b b是物件,a為變數 a指向b 3.例項物件指向其原型物件 我們這裡做個驗證,興建乙個no原型 var no function 這個...