Editor's note: The first way I thought of was to use arrays, or use macros in C language, but I found on the Internet that PHP has different implementation methods, so I reprinted the article here
First, we need to write a PHP The function to calculate the sum of two numbers can be written as follows:
/** *计算两个数的和,并返回计算的结果 * @param number $a * @param number $b * @return number */ function sum($a, $b){ return $a + $b; }
Similarly, if we need to calculate the sum of three numbers, we can write it as follows:
/** *计算两个或三个数的和,并返回计算的结果 * @param number $a * @param number $b * @return number $c 该参数可以不传入值,默认为0 */ function sum($a, $b, $c =0){ return $a + $b + $c; }
At this time, if we need to calculate the sum of any number, So how do we need to write PHP functions?
Of course, you may consider using an array as the passing parameter of the function to achieve such a function:
/** *计算任意多个数的和,函数参数params必须为array类型 * @param array params */ function sum($params){ $total =0; foreach($params as $i){ $total += $i; } return $total; }
Well, there is indeed nothing wrong with this approach, because in the program development process before the birth of variable parameters, When any number of parameters need to be passed, they are represented by arrays or other similar collections. However, doesn’t this kind of transmission seem clear and intuitive enough? As a PHP programmer, you should know that there is a function var_dump() in PHP for displaying detailed information about variables, for example:
$age =18; var_dump($age);//显示变量$age的详细信息
When we need to display information about multiple variables, we can also use it like this:
$name ='张三'; $age =18; $gender =true; var_dump($name, $age, $gender);
We know that var_dump() can receive any number of variables at the same time, and does not need to be passed in the form of an array. This parameter passing method is more intuitive and elegant. This form of passing any number of parameters is called variable parameters. Of course, our sum() function can also be implemented in this way:
/** *计算任意多个数的和,并返回计算后的结果 */ function sum(){ //这里的括号中没有定义任何参数 $total =0; //使用func_get_args()来获取当前函数的所有实际传递参数,返回值为array类型 $varArray = func_get_args(); foreach($varArray as $var){ $total += $var; } return $total; }
/*****The following is a calling example*****/
echo sum(1,3,5); //计算1+3+5 echo sum(1,2);//计算1+2 echo sum(1,2,3,4); //计算1+2+3+4
As shown in the above example, just use the PHP built-in function func_get_args() in the current function, Then we can get the actual parameter array passed when calling the function, and then we only need to process the parameter array.
Note 1: 1. If no parameters are passed in when called, the function func_get_args() still returns the array type, but is an empty array (the array does not contain any elements). 2.func_get_args() can only be called within a function, otherwise a warning message will be displayed. 3. The func_get_args() function can receive an index parameter to obtain the parameter at the specified index in the parameter array. For example, if you want to get the first argument passed in, you can call: func_get_args(1). 4. In addition, you can also call func_num_args() in the function, which can return the number of parameters passed in the current function call.
Note 2: The implementation of variable parameters in PHP is very similar to the implementation of variable parameters in JavaScript. PHP uses the built-in function func_get_args() to implement it, and JavaScript uses the built-in function variable arguments to implement it.
Note 3: In the final sum() function code, the sum() function does not define any formal parameters, so 0, 1, 2~n parameters can be passed in when calling this function. However, in general, at least two numbers are needed to calculate the sum. Therefore, you can define two formal parameters at the definition of the sum() function, for example: sum($a, $b), and the other code remains unchanged. In this way, when calling this function, you must pass in at least two parameters.
Note 4: Since PHP has a built-in function array_sum() that calculates the sum of all elements in an array, the final version of the above code is as follows:
/** *计算任意多个数的和,并返回计算后的结果 */ function sum($a, $b){ return array_sum(func_get_args()); }
The above introduces the PHP variable parameter implementation, including aspects, I hope it will be helpful to those who are interested in PHP tutorials.
Related articles:
php How to pass each element of the array as an actual parameter of a variable parameter function?
Example code of the difference between JS and PHP in passing variable parameters to functions