Добрый день, %username%!
Сегодня мне хотелось бы обсудить тему type hinting в PHP. В данный момент в листе рассылки для разработчиков идёт жаркая дискуссия на эту тему и обсуждается какой подход нужно использовать и как это будет работать. Ваш покорный слуга тоже активно участвует в этой дискуссии.
Дискусию можно начать читать здесь и продвигается по ней кликая на next in thread.
Обсуждается два основных варианта имплементации — строгое типизирование и мягкое.
Лично я поддерживаю второй вариант. И вот почему.
Во первых, этот вариант поддерживает автоматические трансляции вида integer => float, float => string, string -> float, string => integer. Вы скажете, а как же «123abc» => int => 123!? В этом случае будет ошибка. А нужно это для того, что бы не приходилось заниматся ручной конвертацией типов каждый раз, когда мы что-то выбираем из базы данных. Согласитесь, каждый раз явно конвертировать ID записи к int — это писать очень и очень много дополнительного кода (кто не в курсе, большинство библиотек для работы с базами в PHP все данные отдают в виде строк, не зависимо от того, что за тип колонки в базе данных). И именно поетому лично я против строгого типизирования — оно принесёт больше проблем чем пользы. Да и пользоватся им будет весьма сложно из-за самой природы PHP.
В общем случае механизм работы предпологается такой:
В общем если вам есть что сказать — подписывайтесь на лист рассылки php-internals и пишите в него. Если вам это делать лень — могу отправить сообщение за вас.
А что думаешь по этому поводу ты, %username%? За какой подход голосуешь ты?
UPD1: Итог дискуссии я подведу в общем топике и отошлю его в internals mailing list. Так что у вас есть возможность высказать мнение как русского PHP comunity.
Сегодня мне хотелось бы обсудить тему type hinting в PHP. В данный момент в листе рассылки для разработчиков идёт жаркая дискуссия на эту тему и обсуждается какой подход нужно использовать и как это будет работать. Ваш покорный слуга тоже активно участвует в этой дискуссии.
Дискусию можно начать читать здесь и продвигается по ней кликая на next in thread.
Обсуждается два основных варианта имплементации — строгое типизирование и мягкое.
- Строгое типизирование — это проверка типа переменной при передачи параметра функции. Любое несоотвествие приводит к ошибке или notice
- Мягкое типизирование — это проверка как по типу (запрет передачи array вместо integer), так и возможность автоматической конвертации определённых типов (об этом подробнее дальше).
Лично я поддерживаю второй вариант. И вот почему.
Во первых, этот вариант поддерживает автоматические трансляции вида integer => float, float => string, string -> float, string => integer. Вы скажете, а как же «123abc» => int => 123!? В этом случае будет ошибка. А нужно это для того, что бы не приходилось заниматся ручной конвертацией типов каждый раз, когда мы что-то выбираем из базы данных. Согласитесь, каждый раз явно конвертировать ID записи к int — это писать очень и очень много дополнительного кода (кто не в курсе, большинство библиотек для работы с базами в PHP все данные отдают в виде строк, не зависимо от того, что за тип колонки в базе данных). И именно поетому лично я против строгого типизирования — оно принесёт больше проблем чем пользы. Да и пользоватся им будет весьма сложно из-за самой природы PHP.
В общем случае механизм работы предпологается такой:
- «11» превращается в integer и float
- 11 превращается в string и float
- 11.1 превращается в string, float — ошибка.
- «11.1» превращается в float, integer — ошибка
- «11acd» — ошибка как для integer так и float
- Для bool хинта все значения превращаются в true/false по традиционным правилам PHP
- Конвертация из простых типов (bool, int, float, string) в array или object и наоборот всегда выдаёт ошибку.
- Type hinting массивов и объектов остаётся таким, какой он есть сейчас
В общем если вам есть что сказать — подписывайтесь на лист рассылки php-internals и пишите в него. Если вам это делать лень — могу отправить сообщение за вас.
А что думаешь по этому поводу ты, %username%? За какой подход голосуешь ты?
UPD1: Итог дискуссии я подведу в общем топике и отошлю его в internals mailing list. Так что у вас есть возможность высказать мнение как русского PHP comunity.