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

时间:2012-07-18 16:02:54

标签: php

可以将值传递给函数中的特定参数吗?

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

4 个答案:

答案 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.
}

2018的PHP语法和默认值

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
}