use*_*826 94 php function parameter-passing
我编写了一个可以接受10个参数的PHP函数,但只需要2个.有时,我想定义第八个参数,但我不想为每个参数输入空字符串,直到我达到第八个.
我的一个想法是传递带有参数数组的抽象函数,这些参数将它传递给实际函数.
有没有更好的方法来设置功能,所以我只能传入我想要的参数?
Rab*_*ott 60
我在这种情况下所做的是传递一个数组,其中键是参数名称,值是值.
$optional = array(
"param" => $param1,
"param2" => $param2
);
function func($required, $requiredTwo, $optional) {
if(isset($optional["param2"])) {
doWork();
}
}
Run Code Online (Sandbox Code Playgroud)
Mat*_*all 57
使该函数采用一个参数:一个数组.将实际参数作为数组中的值传递.
编辑: Pekka评论中的链接只是总结一下.
Kay*_*ose 44
为了达到你想要的效果,使用像Rabbot所说的阵列(尽管如果过度使用,这可能会成为记录/维护的痛苦).或者只使用传统的可选args.
//My function with tons of optional params
function my_func($req_a, $req_b, $opt_a = NULL, $opt_b = NULL, $opt_c = NULL)
{
//Do stuff
}
my_func('Hi', 'World', null, null, 'Red');
Run Code Online (Sandbox Code Playgroud)
但是,我经常发现当我开始用这么多参数编写一个函数/方法时 - 通常是代码气味,并且可以重新分解/抽象成更清洁的东西.
//Specialization of my_func - assuming my_func itself cannot be refactored
function my_color_func($reg_a, $reg_b, $opt = 'Red')
{
return my_func($reg_a, $reg_b, null, null, $opt);
}
my_color_func('Hi', 'World');
my_color_func('Hello', 'Universe', 'Green');
Run Code Online (Sandbox Code Playgroud)
Mat*_*ias 18
首先,PHP 8
您可以使用命名参数:
function namedParameters($paramOne, $paramTwo, $paramThree = 'test', $paramFour = null)
{
dd($paramOne, $paramTwo, $paramThree, $paramFour);
}
Run Code Online (Sandbox Code Playgroud)
现在,我们可以使用参数调用此函数,required
并且仅default
使用我们希望与函数中指定的值不同的可选参数。
namedParameters('one', 'two', paramFour: 'four');
Run Code Online (Sandbox Code Playgroud)
结果:
// "one", "two", "test", "four"
Run Code Online (Sandbox Code Playgroud)
小智 12
在PHP 5.6及更高版本中,参数列表可能包含...标记,表示该函数接受可变数量的参数.参数将作为数组传递给给定变量; 例如:
示例使用...访问变量参数
<?php
function sum(...$numbers) {
$acc = 0;
foreach ($numbers as $n) {
$acc += $n;
}
return $acc;
}
echo sum(1, 2, 3, 4);
?>
Run Code Online (Sandbox Code Playgroud)
上面的例子将输出:
10
Run Code Online (Sandbox Code Playgroud)
Dan*_*iro 10
注意:这是一个旧帖子,但现在或将来可以帮助某人.
您可以使用以下两种方法之一来实现此目的:
function method_1()
{
$arg1 = (func_num_args() >= 1)? func_get_arg(0): "default_value_for_arg1";
$arg2 = (func_num_args() >= 2)? func_get_arg(1): "default_value_for_arg2";
}
function method_2($arg1 = null, $arg2 = null)
{
$arg1 = $arg1? $arg1: "default_value_for_arg1";
$arg2 = $arg2? $arg2: "default_value_for_arg2";
}
Run Code Online (Sandbox Code Playgroud)
我更喜欢第二种方法,因为它干净且易于理解,但有时您可能需要第一种方法.
小智 9
您只需将默认值设置为null即可.
<?php
function functionName($value, $value2 = null) {
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
173477 次 |
最近记录: |