引用”的概念
跟C和java这些语言一样,PHP也是有引用这个概念的,指的是不同的名字(变量)访问同一个变量内容。表现为在变量或者函数、对象等前面加上&符号
“引用”的相关例子
1. 变量的引用
1
2
3
4
5
6
7
8
9
|
<?php
$a = "123";
$b = &$a;
var_dump($a);//这里输出:123
var_dump($b);//这里输出:123
$b="321";
var_dump($a);//这里$a的值变为321 所以输出321
var_dump($b);//这里输出321
?>
|
2. 变量引用和函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<?php
$a = 10;
//调用函数的时候用了引用了变量,修改了变量指向的内容
function add(&$number){
$number += 1;
return $number;
}
var_dump($a);//输出11
var_dump($a);//输出11
add($a);//调用函数的时候用了引用了变量a,修改了变量a指向的内容
var_dump($a);//输出12
$c = add(1);//报错,变量才能作为引用对象
?>
|
3. 函数的引用返回
1
2
3
4
5
6
7
8
9
10
11
12
|
<?php
static $b=0;//申明一个静态变量
function &test(){
$b=$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
?>
|
对PHP“引用”看法
php中对于地址的指向(类似指针)功能不是由用户自己来实现的,是由Zend核心实现的,php中引用采用的是“写时拷贝”的原理,就是除非发生写操作,指向同一个地址的变量或者对象是不会被拷贝的。有点鸡肋,一般我也不常用,有时用于对某个变量进行复杂操作。如下面,我需要从15道题目随机选取5道且不重复的题目,由于有递归,用上引用的话方便变量的绑定.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
<?php
/**
* Author: kayoon
* Date : 2018/11/24
* Time : 下午12:08
* Desc : function 用递归方式从15道题中筛选不重复的5道题目
* Ver : v1.0
* @param $randArray 题目库的id或者下标集合
* @param $count 剩余需要抽取的题目
* @param $resultArray 抽渠到的题目
* @return mixed
*/
function array_rand($randArray,$count,&$resultArray){
$randNum = rand(0,count($randArray)-1);
array_push($resultArray,$randArray[$randNum]);
unset($randArray[$randNum]);
$count = $count - 1;
$randArray = array_values($randArray);//重置索引
if($count == 0){
return $resultArray;
}
else{
array_rand($randArray,$count,$resultArray);
}
}
/*
*抽选题库
*/
$randArray = array();
for ($i = 1; $i <= 15; $i++ ){
array_push($randArray,array("index"=>$i));
}
$oriArray = array();//初始化
array_rand($randArray,5,$oriArray);
var_dump($oriArray);
//选中的第一道题是题目库第9题,选中的第二道题是题目库的第十题,以此类推
?>
|