男女疯狂一边摸一边做羞羞视频|啊好深好硬快点用力别停动态图|亚洲一区无码中文字幕|特级无码毛片免费视频播放▽|久久狠狠躁免费观看|国内精品久久久久久网站

引用做什么

使用引用執行有三種基本操作: 引用賦值 、 傳引用 、 引用返回 。 本節介紹這些操作,并提供進(jìn)一步閱讀的鏈接。

引用賦值

PHP 的引用允許用兩個(gè)變量來(lái)指向同一個(gè)內容。意思是,當這樣做時(shí):

<?php
  $a 
=& $b;
  
?>
這意味著(zhù) $a$b 指向了同一個(gè)變量。

注意:

$a$b 在這里是完全相同的,這并不是 $a 指向了 $b 或者相反,而是 $a$b 指向了同一個(gè)地方。

注意:

如果對一個(gè)未定義的變量進(jìn)行引用賦值、引用參數傳遞或引用返回,則會(huì )自動(dòng)創(chuàng )建該變量。

示例 #1 對未定義的變量使用引用

<?php
function foo(&$var) { }

foo($a); // 創(chuàng )建 $a 并賦值為 null

$b = array();
foo($b['b']);
var_dump(array_key_exists('b'$b)); // bool(true)

$c = new StdClass;
foo($c->d);
var_dump(property_exists($c'd')); // bool(true)
?>

同樣的語(yǔ)法可以用在返回引用的函數中:

<?php
$foo 
=& find_var($bar);
?>

在函數內使用相同的語(yǔ)法 通過(guò)引用返回將會(huì )產(chǎn)生錯誤, 就像將它與 new 運算符的結果一起使用一樣。 正如 對象和引用 中所述, 盡管對象是通過(guò)指針傳遞的,但是它們與引用不同。

警告

如果在一個(gè)函數內部給一個(gè)聲明為 global 的變量賦于一個(gè)引用,該引用只在函數內部可見(jiàn)??梢酝ㄟ^(guò)使用 $GLOBALS 數組避免這一點(diǎn)。

示例 #2 在函數內引用全局變量

<?php
$var1 
"Example variable";
$var2 "";

function 
global_references($use_globals)
{
    global 
$var1$var2;
    if (!
$use_globals) {
        
$var2 =& $var1// 僅在函數內部可見(jiàn)
    
} else {
        
$GLOBALS["var2"] =& $var1// 全局上下文可見(jiàn)
    
}
}

global_references(false);
echo 
"var2 is set to '$var2'\n"// var2 is set to ''
global_references(true);
echo 
"var2 is set to '$var2'\n"// var2 is set to 'Example variable'
?>
global $var; 當成是 $var =& $GLOBALS['var']; 的簡(jiǎn)寫(xiě)。從而將其它引用賦給 $var 只改變了本地變量的引用。

注意:

如果在 foreach 語(yǔ)句中給一個(gè)具有引用的變量賦值,被引用的對象也被改變。

示例 #3 引用與 foreach 語(yǔ)句

<?php
$ref 
0;
$row =& $ref;
foreach (array(
123) as $row) {
    
// 做點(diǎn)什么
}
echo 
$ref// 3 - 迭代數組的最后一個(gè)元素
?>

雖然不是嚴格意義上的引用賦值,但使用語(yǔ)言構造 array() 創(chuàng )建的表達式也可以通過(guò)在要添加的數組元素加上 & 前綴來(lái)表現為這樣。例如:

<?php
$a 
1;
$b = array(23);
$arr = array(&$a, &$b[0], &$b[1]);
$arr[0]++; $arr[1]++; $arr[2]++;
/* $a == 2, $b == array(3, 4); */
?>

但是請注意,數組內的引用具有潛在的危險。 在右側引用正常的賦值(不是通過(guò)引用)不會(huì )將左側變?yōu)橐茫? 但是數組內部的引用會(huì )保留在這些正常賦值中。 這也適用于調用函數時(shí)按值傳遞數組的情況。例如:

<?php
/* 標量變量賦值 */
$a 1;
$b =& $a;
$c $b;
$c 7//$c 不是引用;不會(huì )改變 $a 或者 $b

/* 數組變量賦值 */
$arr = array(1);
$a =& $arr[0]; //$a 和 $arr[0] 設置了相同的引用
$arr2 $arr//不是引用賦值!
$arr2[0]++;
/* $a == 2, $arr == array(2) */
/* 盡量 $arr 不是引用,但是它的內容已經(jīng)更改! */
?>
換句話(huà)說(shuō),數組的引用行為是在逐個(gè)元素的基礎上定義; 單個(gè)元素的引用行為與數組容器的引用狀態(tài)分離。

傳引用

引用做的第二件事是用引用傳遞變量。這是通過(guò)在函數內建立一個(gè)本地變量并且該變量在呼叫范圍內引用了同一個(gè)內容來(lái)實(shí)現的。例如:

<?php
function foo(&$var)
{
    
$var++;
}

$a=5;
foo($a);
?>
將使 $a 變成 6。這是因為在 foo 函數中變量 $var 指向了和 $a 指向的同一個(gè)內容。更多詳細解釋見(jiàn)引用傳遞。

引用返回

引用做的第三件事是引用返回。

男女疯狂一边摸一边做羞羞视频|啊好深好硬快点用力别停动态图|亚洲一区无码中文字幕|特级无码毛片免费视频播放▽|久久狠狠躁免费观看|国内精品久久久久久网站