Задать вопрос

PHP7: что теперь должен возвращать метод find()?

Мне понравилась идея тайп-хинтинга для скалярных типов, а также проверки возвращаемых методами значений, однако теперь есть одна непонятка:

Раньше метод find(...) DataMapper'а возвращал либо коллекцию элементов, либо null, если ничего не найдено. Метод findOne(...) возвращал DomainObject, либо null, если ничего не найдено.
Но что же делать при strict types? Если пишу "return;" или вообще без return, пишет, что возвратилось none вместо нужного типа; если "return null" - то же самое, например:

"Return value of DataMapper::findOne() must be an instance of DomainObject, null returned."


Как же быть? Если в первом методе ещё можно вернуть пустую коллекцию, то во втором - вообще непонятно.
Хочется, чтобы эти методы возвращали либо объекты заданного класса (и это проверялось движком PHP), либо null.

Ну не выбрасывать же исключения "По вашему запросу ничего не найдено", в конце концов.
  • Вопрос задан
  • 567 просмотров
Подписаться 2 Оценить 2 комментария
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
fornit1917
@fornit1917
У нас в одном проекте есть самописная библиотека для работы с бд. В ней функции типа findOne никогда не возвращают null. Если запись не найдена, они тоже возвращают экземпляр entity. При этом у него есть метод exists, который вернет false, если запись не была найдена. Пример:

$entity = $repository->findOne(123);
if ($entity->exists()) {
  //нашли
} else {
  //не нашли
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽