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

引数を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 に答える
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);
    }
}

通常、デフォルト値を持つ変数をパラメーターリストの最後に配置するため、関数を呼び出すときに空白のパラメーターを含める必要はありません。

詳細については、PHPWebサイトのデフォルトの引数値を参照してください。

アップデート

デフォルト値を持つ複数のパラメーターがあり、それらを個別にスキップできるようにしたい場合は、唯一のパラメーターとして配列を渡し、そこから値を読み取ることができます。

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 に答える
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 に答える
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 に答える