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.

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

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

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

Войти через центр авторизации
Похожие вопросы