PHP-класс со свойством, которое может быть целым или массивом - PullRequest
1 голос
/ 09 августа 2011

У меня есть класс (скажем, Product) со свойством (скажем, product_id) и есть методы для извлечения информации из нескольких таблиц базы данных для данного идентификатора продукта. Теперь я хочу, чтобы методы класса обрабатывали один идентификатор продукта, а также массив идентификаторов продукта (чтобы сохранить количество запросов). Кроме того, выходные данные будут различаться в зависимости от входных данных, т. Е. Для массива в качестве входных данных, в качестве выходных данных я буду иметь массив, проиндексированный с помощью идентификаторов продуктов, тогда как для одного идентификатора мне может не понадобиться этот массив.

Как правильно спроектировать такой класс?

Вот несколько вещей, о которых я подумал:

  1. Имеются отдельные методы с ориентировочными именами для одного и нескольких идентификаторов (чистые, но с дублированием)

  2. Имеется только один метод для обоих типов ввода, проверьте тип ввода ... обработайте ... форматируйте вывод согласно вводу (не совсем чистый)

1 Ответ

1 голос
/ 09 августа 2011

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

Для ввода / вывода вы можете сделать так, чтобы ваши методы принимали одно значение, которое вы собираетесь превратить в массив:

public function foo($val) {
    $val = (array)$val;

    ...
}

И / или вы можете создать «особую удобную оболочку», которая просто дает понять, что она возвращает или принимает отдельные результаты:

public function foos(array $vals) {
    ...

    return /* array of elements */;
}

public function foo($val) {
    return current($this->foos(array($val)));
}
...