0

如何排除函数中需要的变量?

IE:

function foo($name,$address,$pizza_preference,$date)
{
if(!$pizza_preference)
{
return array($name,$address,$date);    
}
else
{
return array($name,$address,$pizza_preference,$date);
}
}

调用此函数时,我将如何设置它$pizza_preference不是必需的,而是可选的?因此,如果您只在函数中输入 3 个参数,它会省略$pizza_preference,或者我是否必须这样做,所以当您输入 0 时它不会返回它?

4

5 回答 5

1

只需为其定义一个默认值。然后您可以使用该函数而不传递值:

function foo($name,$address,$date,$pizza_preference=null)
{
    if(!$pizza_preference)
    {
        return array($name,$address,$date);    
    }
    else
    {
        return array($name,$address,$pizza_preference,$date);
    }
}

通常将具有默认值的变量放在参数列表的末尾,这样在调用函数时就不必包含空白参数。

有关更多信息,请参阅PHP 网站上的默认参数值。

更新

如果您将有多个具有默认值的参数并希望能够单独跳过它们,您可以将数组作为唯一参数传递并从那里读取值:

function foo(array $parameters)
{
    if(!$parameters['pizza_preference'])
    {
        return array($parameters['name'],$parameters['address'],$parameters['date']);    
    }
    else
    {
        return array($parameters['name'],$parameters['address'],$parameters['date'],$parameters['pizza_preference']);  
    }
}
于 2012-04-26T16:30:45.113 回答
1

我建议(而且我总是这样做)将参数作为 Object..

function foo($params)
{
  if(!$params->pizza_preference)
  {
    return array($pizza_preference->name,$pizza_preference->address,$pizza_preference->date);    
  }
  else
  {
    return array($pizza_preference->name,$pizza_preference->pizza_preference->address,$pizza_preference,$pizza_preference->date);
  }
}

示例用法:

$p1 = new stdClass;
$p1->name = 'same name';
$p1->address ='same address';
$p1->pizza_preference = '1';
$p1->date = '26-04-2012';

$p2 = new stdClass;
$p2->name = 'same name';
$p2->address ='same address';
$p2->date = '26-04-2012';

foo($p1); //will return the first array
foo($p2); //will return the second array
于 2012-04-26T16:43:12.330 回答
0

作为一种替代方法,您可以使用关联数组作为单个参数,然后在函数内部检查它,如下所示:

function foo($args) {
    $name = (!empty($args['name']) ? $args['name'] : NULL);
    $address = (!empty($args['address']) ? $args['address'] : NULL);
    $pizza_preference = (!empty($args['pizza_preference']) ? $args['pizza_preference'] : NULL);
    $date = (!empty($args['date']) ? $args['date'] : NULL);
}
于 2012-04-26T16:37:33.817 回答
0

那么你需要更改签名......不需要的任何东西都应该放在最后:

function foo($name, $address, $date, $pizza_preference = null) {

}
于 2012-04-26T16:31:32.587 回答
0

您可以在函数声明中设置默认值:

function foo($name,$address,$date,$pizza_preference=null)
{
   if($pizza_preference === null)
   {
      return array($name,$address,$date);    
   }
   else
   {
      return array($name,$address,$pizza_preference,$date);
   }
}
于 2012-04-26T16:31:48.000 回答