php函数传值的几个细节,及对应实例代码

来源:互联网 发布:淘宝店过户 编辑:程序博客网 时间:2024/04/27 22:37

函数参数传递的方式有两种

1 、传值方式。缺省情况下,函数参数通过传值的方式传递,因此即使在函数内部改变参数的值,它并不会改变函数外部参数的值。

2 、传址方式。传址时只需在函数调用时在参数的前面加上“&”号即可。将函数外部的值的内存地址传递给内部的参数,在函数内部的所有操作都会改变函数外部参数的值。所以希望函数修改外部参数的值,必须使用传址传址方式。

在PHP中,有传下面几种传值方式(网上来源)

//一、基本数据类型的传值

/* **************************************************** */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<count ($arr);$i++){for($j=$i+1;$j<count($arr);$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</count><count ($arr);$i++){for($j=$i+1;$j<count($arr);$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

0 0