Один аргумент массива против нескольких аргументов в PHP - PullRequest
2 голосов
/ 07 июля 2011
public function setSomething($what){
  $this->something = $what;
}

...

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

или

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

...

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

Какой метод вы бы использовали и почему?

ps: второй также может быть использован для эмуляции ключей, я думаю, если вы выдадите имена аргументов:

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

1 Ответ

2 голосов
/ 07 июля 2011

Я обычно использую массив только если несколько аргументов не являются обязательными.Например, если у меня есть отчет, который может содержать идентификатор компании, идентификатор сотрудника или оба.У меня не будет function report ($CompanyID = null, $EmployeeID = null), я сделаю function report($array), а затем внутри функции сделаю if (isset($array['company_id']))... и т. Д.

Если вы считаете, что вам нужно использовать массив, потому что у вас слишком много аргументов,это, вероятно, признак того, что функция слишком сложна и ее нужно разделить.

Редактировать: обратите внимание, что это более общий ответ, так как я не уверен, как это относится к вашей проблеме с сеттером, поскольку логическисеттер должен принимать только один аргумент.В вашей ситуации, если ваш $this->something ожидает массив, присвойте ему массив, а не аргументы, которые вы должны затем превратить в массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...