php函数之如何按值传递参数?

按值传递参数

在编程中,参数传递分为按值传递和按引用传递两种方式。按值传递是指将实参的值复制一份进行传递,而不是传递实参本身的引用。这种方式又分为基本数据类型和复杂数据类型。

基本数据类型按值传递参数

基本数据类型包括整型、浮点型、布尔型、字符型等,这些数据类型都是占用较少内存空间,其值可以较为轻松地进行拷贝。因此,这些数据类型在进行参数传递时,都采用按值传递的方式,即将实参的值复制一份传递到目标函数中。

function add($a, $b){

return $a + $b;

}

$c = 1;

$d = 2;

echo add($c, $d); // 输出结果为: 3

在这个例子中,变量$c和$d分别赋值为1和2,我们调用函数add,将$c和$d作为参数传入,函数内部对他们进行加法运算并返回结果。由于这里的参数类型均为基本数据类型,因此按值传递参数不会出现什么问题。

复杂数据类型按值传递参数

复杂数据类型包括数组、对象等,这些数据类型的内存占用较大,它们的值并不容易进行复制。因此,如果函数参数是此类数据类型,则按值传递参数就有可能会产生问题。

$var1 = [

'name' => 'Sally',

'age' => 18

];

function updateName($varArray){

$varArray['name'] = 'Lucy';

}

updateName($var1);

var_dump($var1); // 输出结果为: array(2) { ["name"]=> string(5) "Sally" ["age"]=> int(18) }

在这个例子中,我们定义了一个数组$var1,其中包含了键值对'name'和'age',我们定义了一个函数updateName,将$var1作为参数传入。函数内部将$varArray这个变量重新赋值为['name' => 'Lucy'] (即只更新了名字),并且结束函数。我们在函数外部使用var_dump查看数组$var1的值,发现它的名字并没有被改变。

为什么会发生这种情况呢?因为在PHP中,数组和对象等因为其内存空间占用较大,因此按值传递参数时,实参复制一个新值作为参数传递,而不是传递实参本身的引用。因此,在函数内部对它所接收的参数进行修改时,只是修改了形参的值,并不会对实参造成影响。

那么,如何在函数内部更新数组或对象的值呢?PHP提供了一个引用传递的方式。我们将在后面内容中介绍。

后端开发标签