在 php 单元测试中,参数传递方式至关重要。按值传递确保函数不更改外部变量;按引用传递允许函数修改外部变量;按默认传递使用函数定义中的默认值。实际案例中,按值传递确保函数不会更改外部变量,而按引用传递允许函数修改外部变量。
PHP函数参数传递方式在单元测试中的应用
在PHP中,函数参数可以通过三种方式传递:
- 按值传递(pass by value):将参数的值复制到函数内部。
- 按引用传递(pass by reference):将参数的引用传递到函数内部,对参数的修改也会影响函数外部的变量。
- 按默认传递(pass by default):使用函数定义中的默认值,如果未提供参数,则使用默认值。
在单元测试中,函数参数传递方式的选择至关重要。
按值传递
當您需要確保函數不改變函數外部的變數時,按值傳遞是理想選擇。例如:
function square($x) {
return $x * $x;
}
// 單元測試
$x = 5;
$result = square($x);
assertEquals(25, $result);
// 驗證函數沒有改變 $x
assertEquals(5, $x);
按引用传递
當您需要函數修改函數外部的變數時,按引用傳遞很有用。例如:
function swap(&$a, &$b) {
$temp = $a;
$a = $b;
$b = $temp;
}
// 單元測試
$a = 1;
$b = 2;
swap($a, $b);
assertEquals(2, $a);
assertEquals(1, $b);
按默认传递
當您希望使用默認值並允許函數根據需要進行調整時,按默認傳遞會很有用。例如:
function formatCurrency($amount, $currency = '$') {
return $currency . $amount;
}
// 單元測試
$amount = 100;
$result = formatCurrency($amount);
assertEquals('$100', $result);
实战案例
考虑一个函数,它需要计算两个数字的总和:
function sum($a, $b) {
return $a + $b;
}
按值传递的单元测试:
// 單元測試
$a = 1;
$b = 2;
$result = sum($a, $b);
assertEquals(3, $result);
// 驗證函數沒有改變 $a 和 $b
assertEquals(1, $a);
assertEquals(2, $b);
按引用传递的单元测试:
// 單元測試
$a = 1;
$b = 2;
sum($a, $b);
assertEquals(3, $a); // 函數修改了 $a
assertEquals(2, $b);