加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php中引用的用法

发布时间:2023-10-26 15:40:38 所属栏目:PHP教程 来源:
导读:php中引用的用法:

1. 变量的引用赋值: $a = &$b

2. 函数调用时的引用参数传递

1) 早期php是在调用时通过&符号传递引用类型的变量, 比如: func(&$arg);

2) 后来, 函数的引用类型参数被规定为
php中引用的用法:
 
1. 变量的引用赋值: $a = &$b
 
2. 函数调用时的引用参数传递
 
    1) 早期php是在调用时通过&符号传递引用类型的变量, 比如: func(&$arg);
 
    2) 后来, 函数的引用类型参数被规定为需要在函数声明时定义, 不如: function func(&$arg);
 
       注: 引用声明时定义引用类型参数后, 运行时引用参数传递被废弃, 需要在php.ini中增加allow_call_time_pass_reference来开启.
 
3. 函数返回引用类型, 这种应用方式需要声明函数时, 在函数名前增加&符号, 并且, 在调用时, 要用引用赋值方式, 比如:
 
 代码如下
 
1
 
function &func() {
 
    return $a;
 
}
 
$a = func();  //这种调用方式得到的不是引用传值
 
$a =& func(); //这样调用才是引用传值
 
简而言之, 就是让函数的返回一个引用类型的值, 一个更实际的例子:
 
 代码如下
 
1 $a = 1;
 
function &func(&$a) {
 
  return $a;
 
}
 
$b = func($a);
 
$c =& func($a);
 
$b = 2;
 
echo "a: $a, b: $b, c: $c.
 
/n";
 
//输出a: 1, b: 2, c: 1.
 
//可见对$b的修改不会影响$a
 
$c = 3;
 
echo "a: $a, b: $b, c: $c.
 
/n";
 
//输出a: 3, b: 2, c: 3.
 
//可见对$c的修改会影响$a
 
 代码如下
 
1 //一、基本数据类型的传值  
 
/* **************************************************** */
 
function testvar($k){
 
 $k = 40;
 
}
 
$c = 30;
 
//给一个函数参数传一个基本数据类型(整型,布尔,字符 ...), 实际上传的就是值 ;
 
testvar($c);
 
echo $c;//结果是:30

function testvar2(&$k){
 
 $k = 40;
 
}
 
$e = 30;
 
//给一个函数参数传一个基本数据类型(整型,布尔,字符 ...), 实际上传的y就是地址 ;
 
testvar2($e);
 
echo $e;//结果是:40
 
/* **************************************************** */
 
//二、数组(默认情况下是复制一份数据),如要传地址则&$arr.
 
$arr1 = array(-1,5,0);
 
function testArr($arr){
 
 for($i=0;$i
 
  for($j=$i+1;$j
 
   if($arr[$i]>$arr[$j]){
 
    $temp = $arr[$i];
 
    $arr[$i] = $arr[$j];
 
    $arr[$j] = $temp;
 
   }
 
  }
 
 
 
 }
 
 print_r($arr);  //结果:Array ( [0] => -1 [1] => 0 [2] => 5 )
 
}
 
testArr($arr1);
 
print_r($arr1);  //结果:Array ( [0] => -1 [1] => 5 [2] => 0 )
 
function testArr2(&$arr){
 
 for($i=0;$i
 
  for($j=$i+1;$j
 
   if($arr[$i]>$arr[$j]){
 
    $temp = $arr[$i];
 
    $arr[$i] = $arr[$j];
 
    $arr[$j] = $temp;
 
   }
 
  }
 
 }
 
}
 
testArr($arr1);
 
print_r($arr1);  //结果:Array ( [0] => -1 [1] => 0 [2] => 5 )

 
/* **************************************************** */
 
//三、对象数据类型传值
 
class person{
 
 public $name;
 
 public  $age;
 
}

$a = new person();
 
$a->name = '小明';
 
$a->age = '20';
 
//变量a在存的是对象的地址,把a赋给b这个变量,实际上就是赋了一个地址。
 
$b = $a;
 
$b->age = 30;
 
//echo $a->age.$b->age;//结果是:30 30
 
//给一个函数参数传一个对象, 实际上传的是这个对象的地址;
 
function test($k){
 
 $k->age =40;
 
}
 
//调用
 
test($b);
 
//echo $a->age.$b->age;//结果是:40 40

php函数的传值与传址有什么区别呢?对于这样的问题我喜欢通过程序演示来获取答案。让我们来看一个演示记录吧!
 
 代码如下
 
1

$i=100;    

function func($n){    
 
   $n=$n+100;    

   return $n;    

}    
 
echo '1)函数传值前变量$i的值:'.$i.'
 
';    
 
echo '2)传值后函数的返回值:'.func($i).'
 
';    
 
echo '3)函数传值后变量$i的值:'.$i.'
 
';    
 
echo '4)函数传址前变量$i的值:'.$i.'
 
';    
 
echo '5)传址后函数的返回值:'.func(&$i).'
 
';    
 
echo '6)函数传址后变量$i的值:'.$i.'
 
';    
 
//echo func($i).'
 
';    
 
?>
 
程序输出:
 
1)函数传值前变量$i的值:100
 
2)传值后函数的返回值:200
 
3)函数传值后变量$i的值:100
 
4)函数传址前变量$i的值:100
 
5)传址后函数的返回值:200
 
6)函数传址后变量$i的值:200
 
   
 
解释:
 
1)直接输出一个赋值$i=100的变量
 
2)func函数传值返回一个算术相加的结果$=100+100
 
3)func函数传值,其作用区域只限于函数内部,对外面的变量$i不会有影响
 
4)同上
 
5)func函数参数前多了个"&"符,表示传址,和2)一样,返回值是函数的算术运行结果。
 
6)func(&$i),变量指针指向$i的位置,可以理解为是对变量$i的操作,$i=$i+100;这时变量$i已经相当于重新被赋值
 
如果去掉上面代码的第18行注释,会得什么结果呢?
 
小结:传址为了在执行函数的同时,同时改变函数参数值,而传值不期望改变。
 
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章