在php中调用多个参数的函数

时间:2012-05-02 20:46:45

标签: php wordpress

我已经定义了一个php函数:

function my_function($text = '', $relative = false, $icon = true) {
//do something
}

它按预期使用默认值。但是当我想改变一个变量的值时,它不起作用:

my_function($icon = false); // this doesn't change anything

我必须用所有变量调用它才能使更改生效:

my_function($text = '', $relative = false, $icon = false); // this changes the output

我在php 5.4.1和Wordpress中工作。我做错了什么?感谢。

4 个答案:

答案 0 :(得分:2)

必须为要更改的参数的左侧(在函数签名中)提供任何默认参数的值。

所以给定了函数:

function my_function($text = '', $relative = false, $icon = true) {
//do something
}

以下是一些例子:

// $text = "foo", $relative = false, $icon = true
my_function("foo"); 

// $text = "", $relative = true, $icon = true
my_function("", true) 

// $text = "", $relative = false, $icon = false
my_function("", false, false) 

答案 1 :(得分:1)

没错,这就是PHP的工作方式。 当您调用函数时,不应将变量放在参数列表中,因为您可能会得到不需要的结果,因为变量将被赋予这些值。所以,这很好:

my_function('', false, false);

或:

my_function($text, $relative, $icon);

或介于两者之间的任何内容,无需分配值。

答案 2 :(得分:1)

my_function($icon = false);

你不能用PHP做到这一点。嗯,你可以,但它没有做你认为它做的。这样做是:

  1. $icon设为false
  2. false作为第一个参数传递给my_function
  3. 如果你想改变第三个参数,你还需要传递前两个参数。

    my_function('', false, true);
    

    注意:我认为python允许你调用这样的函数,只设置第X个参数。

答案 3 :(得分:1)

您可以使用以下代码:

<?php

function my_function($arg = array("text"=>'Default',"relative"=>false,"icon"=>false))
{
  extract($arg);
      $text = isset($text)?$text:"";
      $relative = isset($relative)? $relative : false;
      $icon = isset($icon)? $icon : false;

      //do something

}

my_function(array("icon"=>true));

?>

警告:如果您使用这种方式。您应该初始化变量或检查它是否存在。