萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> php的引用符號&用法

php的引用符號&用法

如果$a和$b指向同一內存地址,自己了不太清楚不過網站找有需要的朋友參考一下。  代碼如下 復制代碼

<?php
$a='CC';
$b=$a;//$a和$b指向同一內存地址
$a='DD';
echo $b;
/*
php中對於地址的指向(類似指針)功能不是由用戶自己來實現的,
是由Zend核心實現的,php中引用采用的是“寫時拷貝”的原理,
就是除非發生寫操作,指向同一個地址的變量或者對象是不會被拷貝的。
當$a='DD';
由於$a與$b所指向的內存的數據要重新寫一次了,此時Zend核心會自動判斷
自動為$b生產一個$a的數據拷貝,重新申請一塊內存進行存儲。
* */

echo '<hr>';
$c='ABC';
$d=&$c;//$b指向$a的內存地址,傳地址賦值
$d='E';
echo $c;
/**
CC
--------------------------------------------------------------------------------
E
* */
?>

<?php
//函數的引用返回
function &test()
{
static $b=0;//申明一個靜態變量
$b=$b+1;
echo '$b='.$b;
echo '<br>';
return $b;
}
$a=test();
echo '$a='.$a;//這裡不是函數的引用返回,跟普通的函數調用沒有區別
$a=&test();  //這種方式才是函數的引用返回。
//至於什麼是引用返回呢(PHP手冊上說:引用返回用在當想用函數找到引用應該被綁定在哪一個變量上面時。)
//用在這裡意思就是test()被綁定在$a上了。
echo '$a='.$a;
$a=6;
test();//這條語句會輸出$b的值 為7
echo '$a='.$a;
/*
$b=1
$a=1$b=2
$a=2$b=7
$a=7
* */
?>

<?php
//引用傳遞
function printArray(&$arr){
     //echo count($arr);
     array_pop($arr);
     echo count($arr);

}
//值傳遞
function printArray2($arr){
     //echo count($arr);
     array_pop($arr);
     echo count($arr);
}
$a=array(1,2,3);
$b=$a;
//$b=&$a;
printArray($a);
print_r($b);
print_r($a);
echo '<hr>';
printArray($a);
print_r($b);
print_r($a);
/**
  2Array ( [0] => 1 [1] => 2 [2] => 3 ) Array ( [0] => 1 [1] => 2 )
--------------------------------------------------------------------------------
1Array ( [0] => 1 [1] => 2 [2] => 3 ) Array ( [0] => 1 )
  * */
?>
<?php
//對象的引用
class a{
var $name="ABC";
}
$b=new a;
$c=$b;
echo '$b->name='.$b->name;//這裡輸出ABC
echo '<br>';
echo '$c->name='.$c->name;//這裡輸出ABC
echo '<br>';
$b->name="DEF";
echo '$b->name='.$b->name;
echo '<br>';
echo '$c->name='.$c->name;
echo '<hr>';
/*
在PHP5中 對象的復制 是通過引用來實現的。
上列中$b=new a; $c=$b; 其實等效於$b=new a; $c=&$b;
PHP5中默認就是通過引用來調用對象,
但有時你可能想建立一個對象的副本,
並希望原來的對象的改變不影響到副本 .
為了這樣的目的,PHP定義了一個特殊的方法,稱為__clone.
* */
$x=new a;
$y=clone $x;
$x->name='XXX';
echo '$x->name='.$x->name;
echo '<br>';
echo '$y->name='.$y->name;

/*
  $b->name=ABC
$c->name=ABC
$b->name=DEF
$c->name=DEF
--------------------------------------------------------------------------------
$x->name=XXX
$y->name=ABC
  * */
?>

copyright © 萬盛學電腦網 all rights reserved