единый массив или многих один аргумент, чтобы вызвать конструктор с параметрами?


Я вижу все больше и больше.

Что вы думаете, что лучше и почему?

Это:

$config = array(
'param1'=>'abc'
'param2'=>'dfg'
);

new Class($config);

Или:

new Class('abc','dfg');


2218
4
php
задан 1 мая 2011 в 05:05 Источник Поделиться
Комментарии
5 ответов

Я всегда использую второй вариант, так как можно использовать тип-намекая. Стиль массива является менее прозрачным.

По крайней мере, стиль массива следует читать так:

$config = array(
Class::PARAM_1_INFO =>'abc'
Class::PARAM_1_SOMETHING =>'dfg'
);

Таким образом, класс-это единственная точка, где ключи вам определенными.

2
ответ дан 1 мая 2011 в 05:05 Источник Поделиться

если есть много аргументов, использовать 3-й вариант. класс config, чтобы передать в качестве аргумента. если есть много аргументов, это может быть признаком того, что правда что-то не так. как правило, чем меньше аргументов, тем лучше.

2
ответ дан 18 мая 2011 в 08:05 Источник Поделиться

Не уверен, что "лучшая работа" - это уместно, но я знаю, изменения подхода массива (в том числе и форматных строк арг) пользуются популярностью на некоторых проектах c, из-за проблем с varargs и повреждение стека.

Мне очень нравится подход массива (не все PHP-конкретных причин), потому что:


  • Абоненту не нужно знать все возможные параметры для данной функции.

  • Абоненту не нужно гадать на разумные значения по умолчанию

  • Абонент автоматически получает, когда рекомендуется изменить значения по умолчанию

  • Разработчику не нужно писать много вариаций функция засорение стека с вложенных вызовов, добавив 1 арг.

  • Слияние массивов для получения значений по умолчанию^ч^Hcan быть достаточно безболезненно

С кон:


  • Абонент автоматически разрывается, когда по умолчанию изменение

Что стоит учесть, не глядя на то, что класс на самом деле, то, что легче понять в вызывающем коде?

$x = new Class(array('needle'=>'abc','haystack'=>'gagagabcfasfgaf'))

или

$х = новый класс('Азбука','gagagabcfasfgaf')

0
ответ дан 1 мая 2011 в 10:05 Источник Поделиться

У меня было пару раз недавно, и каждый раз в итоге понимая, что аргументы передаются в самом деле были все атрибуты сущности создается. Так что я следовал следующей схеме:

$theObject = new TheClass();
$theObject->setParam1('abc');
$theObject->setParam2('def');
$theObject->doSomething();

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

0
ответ дан 30 мая 2011 в 05:05 Источник Поделиться

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

Например:

$c = new Class(ImportantRelatedInterface $obj, $options = array(..));

Если вам очень нужно установить/изменить свойства после создания экземпляра, то вы можете предоставить некоторые сеттеры, но избежать его, чтобы упростить код, если это возможно.
Для вариантов, вы можете предоставить общие сеттер/геттер:

function setOption(..);
function getOption(..);

И даже:

function hasOption(..);

0
ответ дан 13 июня 2011 в 08:06 Источник Поделиться