PHP函数变量参数


PHP function variable parameters

我想制作一个更新函数来更新数据库中的配置文件。现在我有了所有的20个字段,想做一个功能,当我可以说什么数据我发送它。

示例:

function send_data($a, $b, $c, $d, $e, $id){
    $sql = "UPDATE table SET a=$a, b=$b, c=$c, d=$d, e=$e  WHERE id = $id";
    mysql_query($sql);
}

现在我想调用这个函数,例如只给出A和D

这会是吗?如果是,如何?

考虑使用数组:

function send_data($data, $id) {
    $build = array();
    foreach($data as $k=>$v) {
        $build[] = "`".$k."` = '".mysql_real_escape_string($v)."'";
    }
    $sql = "UPDATE `table` SET ".implode(", ",$build)." WHERE `id`=".intval($id);
    mysql_query($sql);
}

在PHP中可以有默认参数,例如:

function send_data($a, $b = 5, $c = 6, $d = "foo")

然后可以通过只指定参数而不指定默认值来调用,因此可以使用1-4个参数来调用此函数。那么问题是,您仍然必须在正确的位置提供参数,因此不能仅指定$a$d。例如,以下所有内容都是有效的

send_data(5);                    // Actually send_data(5, 5, 6, "foo");
send_data(5, 3);                 // Actually send_data(5, 3, 6, "foo");
send_data(5, 1, 9);              // Actually send_data(5, 3, 9, "foo");
send_data(5, 1, 9, "bar");       // Actually send_data(5, 3, 9, "bar");

PHP也不支持关键字参数,所以另一种方法是传入数组,例如:

function send_data($args) {
    do_something_with($args['a']);
}
function send_data( $setData )
  {
    $setVals = array();
    foreach( $setData as $field => $val )
    {
      $value      = mysql_real_escape_string($val);
      $setVals[]  = $field . "='{$value}'";
    }
    $setString = implode(', ', $setVals);
    mysql_query('UPDATE table SET ' . $setString)
  }

您可以通过在声明中定义值来使用函数中的默认参数,但据我所知,您不能"跳过"参数,比如当您有队列$a、$b、$c时,您不能像myfunction那样调用函数(valueforA、valueforC)。从一开始到最后一个你想设置的参数,你都必须让步。比如myfunction(valueforA,NULL,ValueforC);

在您的情况下,您可以使用以下内容:

function send_data($a=NULL, $b=NULL, $c=NULL, $d=NULL, $e=NULL, $id=NULL){
    $sql = "UPDATE table SET a=$a, b=$b, c=$c, d=$d, e=$e  WHERE id = $id";
    mysql_query($sql);

并像一样使用它

send_data(1, 2, NULL, NULL, NULL, 5);

请参阅http://www.php.net/manual/en/functions.arguments.php