Я как бы вас ни к чему не принуждаю :)
И оправдываться ни перед кем не нужно.
Я просто дал вам совет, как правильно задавать вопросы, чтобы получить на них ответ.
А уж следовать ему или нет - дело ваше.
fomiash, если бы бабушка была дедушкой, то у нее бы росли первичные половые признаки.
Вы можете определиться, какой вопрос задаёте?
Нежели так трудно понять простую вещь - на идиотский вопрос вы всё равно ответ не получите.
И поэтому надо задавать нормальные вопросы, а не "ну вот есть код, но он мне не нужен, но дайте мне решение для задачи, которую я сам знаю, а вам не скажу"
DollyPapper, ну вообще я написал там выше, как обрабатывать. Но в целом я склонен согласиться с вами. Или по крайней мере еще подумать над этим кейсом.
Muranx, ну вот коллеги настаивают, что хотя возвращать UserObject вместо array конечно правильнее, но это не имеет прямого отношения к вашему вопросу. А если вернуться к нему, то получается что надо все-таки делать составной тип, UserObject|null (?UserObject)
Ubuntu Pro, про nullable я вам выше уже ответил. Сама проверка была ещё 20 лет назад. Только не "на null", а просто на на то, был передан параметр, или нет. С добавлением типизации эту проверку просто добавили в сигнатуру.
где тут строгость тогда?
Тут нет строгости, потому что есть обратная совместимость.
У меня складывается впечатление, что у вас есть какая-то претензия к разработчикам языка, но я никак не могу уловить её суть.
Сергей delphinpro, Я бы сказал, что так будет однозначно проще.
Но вот насчет лучше я не уверен. Всё-таки, типизация в моем варианте получается строже. Я думаю, зависит от конкретных вариантов использования.
Писать "про и то и то" - это бессмыслица. В огороде бузина, а в Киеве дядька.
потому что формально айдишником может быть что угодно
Это про возвращаемое значение
это для обратной совместимости
Это про параметр
Выберите что-то одно
При чем здесь string|array|callable - я вообще не понял, куда-то вас совсем не туда уносит. Ну или формулируйте свои вопросы более чётко. Если это какой-то новый кейс, никак, внезапно, не связанный с PDO, то опишите его нормально, и не забудьте указать, что конкретно вас в нем смущает.
Анатолий Медведев, я уважаю некоторую догматичность, но только если она не идет вразрез со здравым смыслом :)
str_replace никаким местом не умеет "работать с многобайтовыми кодировками". Во всяком случае, в том смысле, который вкладываете в это понятие вы. Повторюсь, ей это умение просто не нужно. Что доказывает тезис о том, что не всегда при работе с многобайтовыми строками надо обязательно кровь из носу использовать только многобайтовые функции. иногда и однобайтовой достаточно. В как в случае с str_replace или при использовании strpos для установления факта наличия подстроки в строке.
Ubuntu Pro, я думаю, это для обратной совместимости. Ведь типизацию ввели через 20 лет после того, как появилась сигнатура этой функции в виде PDO::lastInsertId($name = null)
И зачем здесь что-то к чему-то приводить? Здесь не нужна пустая строка. Здесь нужно только понимать, был передан параметр, или не был.
Ubuntu Pro, потому что формально айдишником может быть что угодно - например UUID.
Плюс, поскольку PDO работает с самыми разными БД, некоторые драйверы могут не иметь поддержку передачи типов, и возвращать любые данные в виде строк.
Анатолий Медведев, прочтите, что AUser0 написал. Есть ситуации, в которых mb функции просто не нужны
К примеру, не существует mb аналога для str_replace. Как раз по этой причине.
Но в целом я с вами соглашусь. На формуе для новичков, которые не понимают, что делают, так и надо писать: ВСЕГДА, БЕЗ ОГОВОРОК. Я и сам так делаю, когда заходит речь о подготовленных запросах например :)
И оправдываться ни перед кем не нужно.
Я просто дал вам совет, как правильно задавать вопросы, чтобы получить на них ответ.
А уж следовать ему или нет - дело ваше.