php函数,将值传递给特定参数?

php函数,将值传递给特定参数?,php,Php,是否可以将值传递给函数中的特定参数 function fun1($a,$b) { echo $b; } @fun1(123); 没有 但是按照惯例,您可以通过在该位置传递NULL来跳过内置函数的参数: fun1(NULL, 123); 显然,这并非对所有事情都有意义-例如,这毫无意义: $result = strpos(NULL, 'a string'); 对于用户定义的函数,由您以您认为合适的任何方式处理参数-但是对于使用不确定数量参数的函数,您可能会发现/有用 另外,不要忘记,您可以通

是否可以将值传递给函数中的特定参数

function fun1($a,$b)
{
echo $b;
}
@fun1(123);
没有

但是按照惯例,您可以通过在该位置传递
NULL
来跳过内置函数的参数:

fun1(NULL, 123);
显然,这并非对所有事情都有意义-例如,这毫无意义:

$result = strpos(NULL, 'a string');
对于用户定义的函数,由您以您认为合适的任何方式处理参数-但是对于使用不确定数量参数的函数,您可能会发现/有用

另外,不要忘记,您可以通过定义默认值使参数成为可选参数:

function fun ($arg = 1) {
  echo $arg;
}

fun(2); // 2
fun();  // 1
请注意,默认值只能在最右边的参数上定义。如果右侧的参数没有默认值,则不能为参数指定默认值。所以这是非法的:

function fun ($arg1 = 1, $arg2) {
  // Do stuff heere
}
没有

但是按照惯例,您可以通过在该位置传递
NULL
来跳过内置函数的参数:

fun1(NULL, 123);
显然,这并非对所有事情都有意义-例如,这毫无意义:

$result = strpos(NULL, 'a string');
对于用户定义的函数,由您以您认为合适的任何方式处理参数-但是对于使用不确定数量参数的函数,您可能会发现/有用

另外,不要忘记,您可以通过定义默认值使参数成为可选参数:

function fun ($arg = 1) {
  echo $arg;
}

fun(2); // 2
fun();  // 1
请注意,默认值只能在最右边的参数上定义。如果右侧的参数没有默认值,则不能为参数指定默认值。所以这是非法的:

function fun ($arg1 = 1, $arg2) {
  // Do stuff heere
}

可以定义函数,使其不需要所有参数。例如:

function foo($a, $b = 2) {
    echo $a + $b;
}

foo(1); //gives 3
了解有关默认函数值的信息

但是,如果不指定较早的参数,则无法传入较晚的参数。一些简单的编程函数参数基础。。。执行
foo($b)
时,函数不知道变量名为
b
。。。它只是获取数据;通常是基元类型(在本例中为int)或引用

您尚未指定如何使用这些变量,因此您可能希望为
$a
(并在函数中处理它)(
foo(-1123)
)提供一个类似“-1”的伪值,或者重写函数,使$a成为具有默认值的第二个参数。(
函数foo($b,$a=NULL)

这就是为什么必须按顺序传递变量;函数假定您正确使用它,并将传递的值与函数定义对齐<代码>函数foo($a,$b)意味着“我假设我应该将您的第一个值与
a
关联,将您的第二个值与
b
关联”


使用原始示例
函数foo($a,$b)

没有上下文,所以我只想说做这个
函数foo($b,$a=some\u default\u value)
。但是,我假设您同时使用
$a
$b
,这样您就可以检查它是否是某个默认的无效值并对其进行操作但是,如果您的函数根据传递的参数(数量)执行不同的任务,则可能需要将函数分开。

如果您坚持不切换顺序,可以使用一个伪值调用
foo(-1123)
,并检查它。不过,同样的问题如上所述


编辑:您已经给出了另一个示例
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



我格式化了你的函数。首先,当我试着打那个电话时,它没有给我“HI123”。其次,
@
是一种不好的做法,它确实会减慢代码的速度。第三,您不需要echo FUN1,因为它不返回任何内容;您的函数将打印内容本身

你(你的学生)走错了方向。正如我在评论中所说,函数已经有了一种很好的参数排序方法。与其尝试做一些古怪的事情来解决这个问题,不如改变你的方法


上面的例子没有实际用途,我相信在实际代码中,当设置不同的变量时,应该只编写不同的函数。比如
setA($a)setB($b)setC($c)setAll($a,$b,$c)
并相应地使用它们。数组对于简单的可变长度函数很有用,但如果您检查每个标记以执行某些操作,则会出现问题。

可以定义函数,使其不需要所有参数。例如:

function foo($a, $b = 2) {
    echo $a + $b;
}

foo(1); //gives 3
了解有关默认函数值的信息

但是,如果不指定较早的参数,则无法传入较晚的参数。一些简单的编程函数参数基础。。。执行
foo($b)
时,函数不知道变量名为
b
。。。它只是获取数据;通常是基元类型(在本例中为int)或引用

您尚未指定如何使用这些变量,因此您可能希望为
$a
(并在函数中处理它)(
foo(-1123)
)提供一个类似“-1”的伪值,或者重写函数,使$a成为具有默认值的第二个参数。(
函数foo($b,$a=NULL)

这就是为什么必须按顺序传递变量;函数假定您正确使用它,并将传递的值与函数定义对齐<代码>函数foo($a,$b)意味着“我假设我应该将您的第一个值与
a
关联,将您的第二个值与
b
关联”


使用原始示例
函数foo($a,$b)

没有上下文,所以我只想说做这个
函数