傳值:在php中傳值的意思相當於複製,我將你的值複製給我,我可以隨意改變複製之後的值,對你是不會產生影響的。
function test1()
{
$a = 1;
$b = $a;
echo $b.'<br>'; //1
$b = 2;
echo $a .'<br>'.$b; //1 2
}
// 解釋:將a的值賦給b,改變b的值,a的值不受影響。
傳引用:在php中傳引用用‘&’符號,是相當於我不僅將你的值賦給我,還將你的內存地址也複製過來了,那麼我們兩個任何一個改變,另外一個就跟着改變。
function test2()
{
$a = 1;
$b = &$a;
echo $b.'<br>'; //1
$b = 2;
echo $a .'<br>'.$b; //2 2
}
// 解釋:將a的值和內存地址賦給b,改變b的值,a的值也改變。
然後我們來看一下這道面試題:
$a = 1;
$b = &$a;
unset($a);
echo $b; //??
unset並沒有真正銷燬變量的作用,僅是切斷了變量與內存之間的關係,內存只要還被引用着就不會被釋放; $b和$a同時指向1,切斷其中$a的關係,$b還是指向1,所以上題不報錯,照樣輸出1。
另外補充一點: 在PHP中對象的傳值默認是引用傳值。