2

我定义了一个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

4 回答 4

3

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

所以给定函数:

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) 
于 2012-05-02T21:16:21.537 回答
2
my_function($icon = false);

你不能在 PHP 中做到这一点。嗯,你可以,但它不会做你认为它做的事情。这是做什么的:

  1. 设置$iconfalse
  2. false作为第一个参数传递给my_function

如果要更改第三个参数,还需要传递前两个。

my_function('', false, true);

注意:我认为是 python 可以让你调用这样的函数,只设置 Xth 参数。

于 2012-05-02T21:02:11.863 回答
1

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

my_function('', false, false);

或者:

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

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

于 2012-05-02T20:50:19.923 回答
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));

?>

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

于 2012-05-02T21:12:17.823 回答