Single array argument versus multiple arguments in PHP

383 Views Asked by At
public function setSomething($what){
  $this->something = $what;
}

...

$obj->setSomething(array('aaa', 'bbb', 'ccc'));

or

public function setSomething(){
  $this->something = array_values(func_get_args());
}

...

$obj->setSomething('aaa', 'bbb', 'ccc');

Which method would you use and why?

ps: the second one could also be used to emulate keys I think, if you give out argument names:

$obj->setSomething($key1 = 'aaa', $key = 'bbb', $key = 'ccc');
1

There are 1 best solutions below

0
Andrew On BEST ANSWER

I usually only use an array if multiple arguments are optional. For example, if I have a report that can take a company ID, an employee ID, or both. I won't have function report ($CompanyID = null, $EmployeeID = null), I'll do function report($array) and then inside the function, do if (isset($array['company_id']))... etc.

If you think you need to use an array because you have too many arguments, that's probably a sign that the function is too complicated and needs to be split up.

Edit: Note that this is more a general answer, as I'm not sure how it applies to your setter issue, since logically a setter should only take one argument. In your situation, if your $this->something expects an array, give it an array, rather than arguments that you have to then turn into an array.