PHP-класс со свойством, которое может быть целым или массивом
У меня есть класс (скажем, Product) со свойством (скажем, product_id) и есть методы для извлечения информации из нескольких таблиц базы данных для данного идентификатора продукта. Теперь я хочу, чтобы методы класса обрабатывали один идентификатор продукта, а также массив идентификаторов продукта (чтобы сохранить количество запросов). Кроме того, выходные данные будут варьироваться в зависимости от входных данных, т.е. для массива в качестве входных данных, в качестве выходных данных я буду иметь массив, проиндексированный с помощью идентификаторов продуктов, тогда как для одного идентификатора этот массив может не понадобиться.
Как правильно разработать такой класс?
Вот пара вещей, о которых я подумал:
Иметь отдельные методы с ориентировочными именами для одного и нескольких идентификаторов (чистый, но дублирующий)
Имейте только один метод для обоих типов ввода, проверьте тип ввода... обработайте... форматируйте вывод согласно вводу (не очень чистый)
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)));
}