我已经定义了一个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中工作。我做错了什么?感谢。
答案 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做到这一点。嗯,你可以,但它没有做你认为它做的。这样做是:
$icon
设为false
false
作为第一个参数传递给my_function
如果你想改变第三个参数,你还需要传递前两个参数。
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));
?>
警告:如果您使用这种方式。您应该初始化变量或检查它是否存在。