Привет мужики. Создаю новый класс. В нем есть метод вывода массива данных из БД. Иногда надо вывести одну строку, иногда все, а иногда и какие-то параметры указать особые (заранее прописанные). Я делаю так: public function getAll($options = []){}
Пока что массив принимает только: $options['id']
Вопрос: 1) Верно ли я построил логику вывода данных в одном методе, то есть либо можем указать ID, либо нет и тогда выведутся все записи, или надо было создать отдельный метод, выводящий только одну запись? 2. Правильно ли я назвал метод getAll. ведь переводится как "получить всё". А есть сокращу до get, по моему не тот смысл уже. Как такие методы вообще принято называть по PSR?
1. Для поиска одной записи по ID было бы логичным и удобным реализовать отдельный метод, например какой нибудь findOne($id). Что касается метода getAll - что содержит массив Options? Набор параметров по которым необходимо выбирать записи? если да тогда передавать это массивом, не очень хорошая практика, лучше сделать какой-нибудь объект критерию. Да и само название $options не особо удачно...
2. Лучше называть подобные методы например find()
Получится дублирование кода? Пока только мысль, для findOne($id) и findAll() вывести запрос в свойства, а внутри метода видоизменять запрос, к примеру дописав WHERE id = ?
ну разные есть методики некоторые используют название get как взять т.е. либо данные либо ошибка + методы с префиксом find где либо данные либо false.
А в вашем случае можно изощерятся как угодно типа findAll, findById, findByConditions и т. д.
PS прочитайте про ORM
Не используйте в одном методе кучу функционала. Каждый метод должен делать строго определенную функцию и возвращать значение строго определенного типа иначе будут всплывать неожиданности при обработке таких "универсальных функций".
Для вывода одной записи и списка используйте отдельные методы.
Для именования методов поглядывайте на стандарты, но не заморачивайтесь - без фанатизма. Главное в наименовании переменных и функций было понятно что это такое, желательно соблюдать синтаксис английской мовы, и обязательно следовали единому правилу именования внутри проекта.
Метод ВСЕГДА строго возвращает массив. Получится дублирование кода? Или как? Я просто не могу найти как это реализовать? Запрос к БД прописывать в общих переменных а внутри метода видоизменять запрос?
Если всегда возвращает массив, значит скорее всего выполняет одну функцию. То есть используя ваш $options вы задаете параметры для последующего запроса, ответ на который будет всегда список. То есть все, вроде, правильно. Единственное, чтоб я порекомендовал - это изменить название с getAll() на какой нибудь get().
Методы, что рекомендуют выше, они достаточно полезны и визуально могут помогать при чтении такого кода. Но при их добавлении в ваш класс для работы с БД, конечно, старайтесь избегать дублирования кода.