">

传值赋值与引用赋值详解

传值赋值与引用赋值详解

2. unset()对引用赋值变量的影响以及应用

1

2 $a = '1';

3 $b =& $a;

4 echo "$a,$b


";

5 // 显示1,1

6 unset($a);

7 echo "$a,$b


";

8 // $a被销毁,但是由于$b依旧占用‘1’这个参数,$b可调用。

9 ?>

如果程序比较大,引用同一个对象的变量比较多,并且希望用完该对象后手工清除它,用 "&" 方式,然后用$var=null的方式清除。

3. 函数中的引用赋值

1

2 function num(&$num) // 引用赋值

3 {

4 $num++;

5 return $num;

6 }

7 $a = 1;

8 echo $a.',';

9 echo num($a).',';

10 echo $a;

11 // 显示1,2,2

12 ?>

此种函数,无法使用num(1),参数必须为变量。

4. 函数的引用返回

function &test()

{

static $b = 0;//申明一个静态变量

$b += 1;

echo $b.',';

return $b;

}

$a = test();//这条语句会输出 $b的值 为1

$a = 5;

$a = test();//这条语句会输出 $b的值 为2

$a =& test();//这条语句会输出 $b的值 为3

$a = 5;

$a = test();//这条语句会输出 $b的值 为6

?>

$a = test()方式调用函数,只是将函数的值赋给$a而已,而$a做任何改变 都不会影响到函数中的$b.

而通过$a = &test()方式调用函数,作用是将return $b中的$b变量的内存地址与$a变量的内存地址指向了同一个地方。

即产生了相当于这样的效果($a=&$b;) 所以改变$a的值,也同时改变了$b的。

5. 对象的引用

class a{

var $abc = "ABC";

}

$b = new a;

$c = $b;

echo $b->abc;//这里输出ABC

echo $c->abc;//这里输出ABC

$b->abc = "DEF";

echo $c->abc;//这里输出DEF

?>

在PHP5中 对象的赋值是个引用的过程。上列中$b=new a; $c=$b; 其实等效于$b=new a; $c=&$b;

PHP5中默认就是通过引用来调用对象, 但有时你可能想建立一个对象的副本,并希望原来的对象的改变不影响到副本 . 为了这样的目的,PHP5定义了一个特殊的方法,称为__clone。

自 PHP 5 起,new 自动返回引用,因此在此使用 =& 已经过时了并且会产生 E_STRICT 级别的消息。

(此段摘自http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/09/10/2173092.html)

6. global引用

$a =& $GLOBALS["a"];

?>

当用 global $a 声明一个变量时实际上建立了一个到全局变量的引用。unset($a) 不会 unset 全局变量。

7. 大数组中处理的好处

一个很大的数组$a,如果使用$b = $a;,那么内存使用将多一倍,如果用$b =& $a;,那么几乎没有啥影响,且速度快于前者。

$arr = array(

'0' => array(

'0' => array()

),

'1' => array()

);

// 第一种方法

$arr[0][0] = 1;

// 第二种方法

$b =& $arr[0];

$b[0] = 1;

?>

相关手记

beat365英超欧冠比分 魅族 魅蓝Note 5(2016年12月上市)
beat365英超欧冠比分 阅读挣钱最快的 app有哪些?3款神器帮你轻松赚零花钱!
365bet取款要多久 朱雨玲成国乒第9位世界杯冠军 飞机果然起飞了
beat365英超欧冠比分 2014巴西世界杯意大利队名单 意大利队球员阵容一览
365bet取款要多久 一加5怎么装卡插卡 一加5SIM卡安装攻略【步骤详解】
365bet取款要多久 2尺等于多少厘米

2尺等于多少厘米

07-02 👁️ 6959