Мне понравилась идея тайп-хинтинга для скалярных типов, а также проверки возвращаемых методами значений, однако теперь есть одна непонятка:
Раньше метод 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.
Ну не выбрасывать же исключения "По вашему запросу ничего не найдено", в конце концов.