国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

php 變量引用,函數(shù)引用

Original 2016-10-21 14:07:02 1724
abstract:在 PHP 中引用意味著用不同的名字訪問同一個變量內(nèi)容。這并不像 C 的指針,替代的是引用是符號表別名。注意在 PHP 中,變量名和變量內(nèi)容是不一樣的,因此同樣的內(nèi)容可以有不同的名字。 引用傳遞function foo ( &$var ){$var++;} foo ($a);  // 注意在函數(shù)調(diào)用時

在 PHP 中引用意味著用不同的名字訪問同一個變量內(nèi)容。這并不像 C 的指針,替代的是引用是符號表別名。注意在 PHP 中,變量名和變量內(nèi)容是不一樣的,因此同樣的內(nèi)容可以有不同的名字。

 

引用傳遞

function foo ( &$var ){$var++;}
foo ($a);  // 注意在函數(shù)調(diào)用時沒有引用符號 - 只有函數(shù)定義中有。光是函數(shù)定義就足夠使參數(shù)通過引用來正確傳遞了
引用返回
function &init_users(){ ... return $cls;}
使用引用返回,必須在兩個地方都用&符號
$user = & init_users();
function &init_users(){ ...return $cls;}
取消引用當(dāng) unset 一個引用,只是斷開了變量名和變量內(nèi)容之間的綁定。這并不意味著變量內(nèi)容被銷毀了。
$a="hihaha";$b= &$a;unset($b);echo$a;// shows "hihaha"

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

這里有個php引用的例子,好好看一遍:

<?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"
?>

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

PHP unset全局變量在用戶函數(shù)中只能銷毀局部變量,并不能銷毀全局變量。(從PHP4開始unset已經(jīng)不再是一個函數(shù)了,而是一個語句)。如果需要銷毀全局變量的應(yīng)該如何做呢?也很簡單,用$GLOBALS數(shù)組來實(shí)現(xiàn)。

< ?PHP 
function foo() { 
unset($GLOBALS['bar']);  // 而不是unset($bar)
} 
$bar = “something”; 
foo(); 
var_dump($bar); 
?>

對于unset:

1. 該函數(shù)只有在變量值所占空間超過256字節(jié)長的時候才會釋放內(nèi)存
2. 只有當(dāng)指向該值的所有變量(比如有引用變量指向該值)都被銷毀后,地址才會被釋放(也要執(zhí)行1的判斷)
也就是檢查有無其他變量綁定,有的話就不會釋放了。就像這個例子:

$a="hihaha";
$b= &$a;
unset($b);
echo$a;// shows "hihaha"

所以建議大家用 $變量=null 的方法來釋放其內(nèi)存。

 給一個測試當(dāng)前php腳本內(nèi)存使用情況的函數(shù):

<?phpecho memory_get_usage()."\n";$a = str_repeat("A", 1000);
echo memory_get_usage()."\n";
$b=&$a;  //下面的內(nèi)存大小不會變,unset只是解除$a的綁定unset($a);
echo memory_get_usage()."\n";?>


Release Notes

Popular Entries