Event_Horizon
Event_Horizon

Reputation: 707

How to exclude a variable from being required in a function?

How to exclude a variable from being required in a function?

IE:

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

When calling this function how would I set it up so $pizza_preference is not required, but optional? So that if you only entered 3 arguments in the function it omits $pizza_preference, or would I have to make it so when you enter 0 it just doesn't return it?

Upvotes: 0

Views: 215

Answers (5)

ilyes kooli
ilyes kooli

Reputation: 12053

I recommend (and I always do) to pass arguments as 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);
  }
}

Sample usage:

$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

Upvotes: 1

John Conde
John Conde

Reputation: 219894

Just define a default value for it. Then you can use that function without passing a value:

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

Usually you put variables that have default values at the end of the parameters list so you don't have to include blank parameters when calling the function.

See Default argument values on the PHP website for more.

UPDATE

If you're going to have multiple parameters with default values and want to be able to skip them individually you can pass an array as the only parameter and read the values from there:

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']);  
    }
}

Upvotes: 1

Brian Glaz
Brian Glaz

Reputation: 15696

As an alternative approach, you can use an associative array as a single argument, and then just check it inside the function like this:

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);
}

Upvotes: 0

Blake
Blake

Reputation: 2314

You can set default values in the function declaration:

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);
   }
}

Upvotes: 0

prodigitalson
prodigitalson

Reputation: 60413

Well youll need to change the signature... anything not required should go last:

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

}

Upvotes: 0

Related Questions