我定义了一个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。我做错了什么?谢谢。
您必须为要更改的参数左侧(在函数签名中)的任何默认参数提供值。
所以给定函数:
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)
my_function($icon = false);
你不能在PHP中做到这一点。 好吧,你可以,但它不会做你认为它做的事情。 这样做的是:
- 将
$icon
设置为false
- 将
false
作为第一个参数传递给my_function
如果要更改第三个参数,则还需要传递前两个参数。
my_function('', false, true);
注意:我认为是python允许您调用这样的函数,仅设置第X个参数。
没有错,这就是PHP的工作方式。当你调用一个函数时,你不应该把变量放在参数列表中,因为你可能会得到不希望的结果,因为变量将被分配这些值。所以,这很好:
my_function('', false, false);
或:
my_function($text, $relative, $icon);
或介于两者之间的任何内容,无需分配值。
您可以使用
以下代码:
<?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));
?>
警告:如果您使用这种方式。 您应该初始化变量或检查它是否存在。