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


Calling functions with multiple arguments in php

我定义了一个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中做到这一点。 好吧,你可以,但它不会做你认为它做的事情。 这样做的是:

  1. $icon设置为false
  2. 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));
?>

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