可以将值传递给函数中的特定参数吗?
function fun1($a,$b)
{
echo $b;
}
@fun1(123);
答案 0 :(得分:4)
可以定义函数,使它们不需要所有参数。例如:
function foo($a, $b = 2) {
echo $a + $b;
}
foo(1); //gives 3
了解默认函数值here
但是,如果不指定之前的参数,则无法传入后面的参数。一些简单的编程 - 函数 - 参数 - 基础...当你foo($b)
时,函数不知道变量是命名 b
...它只是获取数据;通常是原始类型(在本例中为int)或引用。
您尚未指定如何使用这些变量,因此您可能希望向$a
提供类似“-1”的虚拟值(并在您的函数中处理它)(foo(-1, 123)
),或重写您的函数,以便$ a是具有默认值的第二个参数。 (function foo($b, $a = NULL)
)
这就是你必须按顺序传递变量的原因;该函数假定您正确使用它,并且它将使用函数定义传递的值对齐。 function foo($a, $b)
表示“我假设我应将您的第一个值与a
相关联,而您的第二个值应与b
相关联”。
使用原始示例function foo($a, $b)
:
没有上下文,所以我只想说这样做function foo($b, $a = some_default_value)
。但是,我假设你正在使用$a
和$b
,所以你可以查看它是否是某个默认无效值并对其采取行动。 但是,如果您的函数根据传递的参数(数量)执行不同的任务,您可能希望将函数分开。
如果您坚持不切换订单,可以使用虚拟值调用foo(-1, 123)
并进行检查。但是,同样的问题与上面相同
编辑:您已经提供了另一个示例foo($a, $b, $c)
,并且您说您想要foo($b)
来更新中间值。请参阅第一段中有关函数如何知道参数是什么的解释。
如果你的意思是想要将一组任意变量传递给一个函数,它知道它得到了哪些变量?我再次认为这不是最好的做法(你需要给我们更多关于你如何使用它的细节),但你可以传递一个关联数组:
function foo($arr) {
if (isset($arr['a'])) {
echo $a;
}
if (isset($arr['b'])) {
echo $b;
}
if (isset($arr['c'])) {
echo $c;
}
}
foo(array('b' => 123));
写这个函数后我觉得很可怕:P
<?php
function FUN1($a, $b)
{
echo "HI";
echo $b;
} //$_a= 123; //error_reporting (E_ALL ^ E_NOTICE ^ E_WARNING); //$b=23; echo @FUN1(123);//it gives HI123
?>
我格式化了你的功能。首先,当我尝试这个电话时,它不会给我“HI123”。其次,@
是不好的做法,真的会减慢代码的速度。第三,你没有echo FUN1
因为它没有返回任何东西;你的功能打印自己的东西。
你(你的学生)正朝着错误的方向前进。正如我在评论中所说,函数已经有了一种很好的方法来整理参数。
,而不是试图做一些时髦的事情并解决这个问题上面的例子没有实际用途,我确信在实际代码中你应该在设置不同的变量时编写不同的函数。像setA($a) setB($b) setC($c) setAll($a, $b, $c)
一样使用它们。数组对于简单的可变长度函数很有用,但是如果你要检查每个标记做某事,那么就会出错。
答案 1 :(得分:1)
如果你只想传递一个参数,你可以创建一个这样的包装函数:
function PassOne($arg)
{
fun1(NULL,$arg);
}
function fun1($a,$b)
{
echo $b;
}
答案 2 :(得分:1)
原谅任何不准确之处。我用PHP编码已经有一段时间了。
如果要确保参数的顺序,可以将单个数组作为参数传递。
$args = array(
'name' => 'Robert',
'ID' => 12345,
'isAdmin' => true
);
example($args);
function example($args)
{
echo $args['name']; // prints Robert
echo $args['ID']; // prints 12345
echo $args['isAdmin']; // prints true
}
使用这种方法,您还可以将默认值硬编码到函数中,只有在参数数组中提供它们时才替换它们。例如:
$args = array(
'name' => 'Robert',
'ID' => 12345
// Note that I didn't specify whether Robert was admin or not
);
example($args);
function example($args)
{
$defaultArgs = array(
'name' => '',
'ID' => -1,
'isAdmin' => false // provides a default value to incomplete requests
);
// Create a new, mutable array that's a copy of the default arguments
$mixArgs = $defaultArgs;
// replace the default arguments with what was provided
foreach($args as $k => $v) {
$mixArgs[$k] = $v;
}
/*
Now that we have put all the arguments we received into $mixArgs,
$mixArgs is mix of supplied values and default values. We can use
this fact to our advantage:
*/
echo $mixArgs['name']; // prints Robert
// if ID is still set to the default value, the user never passed an ID
if ($mixArgs['ID'] == -1) {
die('Critical error! No ID supplied!'); // use your imagination
} else {
echo mixArgs['ID']; // prints 12345
}
echo mixArgs['isAdmin']; // prints false
// ... etc. etc.
}
function example($args=[], $dftArgs=['name'=>'', 'ID' => -1, 'isAdmin'=>false])
{
if (is_string($args))
$args = json_decode($args,true); // for microservice interoperability
$args = array_merge($dftArgs,$args);
// ... use $args
}
// PS: $dftArgs as argument is not usual, is only a generalization
答案 3 :(得分:0)
没有
但按照惯例,您可以通过在该位置传递NULL
来跳过内置函数的参数:
fun1(NULL, 123);
显然这对所有事情都没有意义 - 例如这没有意义:
$result = strpos(NULL, 'a string');
对于用户定义的函数,您可以以任何您认为合适的方式处理参数 - 但您可能会发现func_get_arg()
/ func_get_args()
对使用不确定数量的参数的函数很有用。 / p>
此外,不要忘记您可以通过定义默认值使参数可选:
function fun ($arg = 1) {
echo $arg;
}
fun(2); // 2
fun(); // 1
请注意,默认值只能在最右侧的参数上定义。如果右边的参数没有参数,则不能给参数赋予默认值。所以这是非法的:
function fun ($arg1 = 1, $arg2) {
// Do stuff heere
}