PHP-класс со свойством, которое может быть целым или массивом

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

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

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

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

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

1 ответ

Решение

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

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

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)));
}
Другие вопросы по тегам