Scalar type hinting в PHP 5.4.X или 6.X
Ну и раз уж я решил перед сном пописáть о PHP, то продолжу. Ещё новость из мира PHP — в PHP будет scalar type hinting. Илья Альшанетский добился включения своего патча в код.
Сейчас type hinting в PHP есть, я могу указать явно, что параметр будет объектом определённого класса или массивом:
function test1(MyClass $var) {}
function test2(array $var) {}
Скоро можно будет указать, что передаваемый аргумент должен быть скаляром. Жаль только, что появилась только возможность указать определённый тип. Если «object» указать можно, то «scalar», к сожалению, нет. Это странно. Придётся указывать явно:
function test3(string $var) {}
Что поможет снизить количество ошибок в отдельных случаях, но как быть, если мне такая жёсткость ни к чему, если я хочу оставить возможность преобразования типов, там где это сделано хорошо (преобразование типа «array» в «string» в PHP сделано бессмысленно, посмотрите на Perl, там это имеет смысл)? Да и как мне указать, что мне всё равно — придёт int или float? Видимо, только явным приведением типа при вызове, а про возврат значения по ссылке, в этом случае, придётся забыть.
В отдельных случаях, хотелось бы, чтобы передав объект в такой типизированный параметр, у объекта дёрнулся метод __toString, а то и __toNumber, если указано, что должен быть передан числовой скаляр.
Надеюсь, не одному мне этого хочется и Илья продолжит работу над патчем.
Добавлено через несколько минут: прочитал комментарии, оказывается идут дискуссии о добавлении ключевых слов «scalar» и «numeric». Кроме того, Илья рассуждает и о преобразованиях типов в рамках type hinting. Ура.
дерганье __toString, если заявлено function f(string $x);
очень хочется, да.
Комментарий для fantaseour.livejournal.com:
Жаль __toNumber нет. Иногда пригодилось бы.
не торопись. ещё откатить могут. там есть много сторонников альтернативного подхода и голосования ещё не было
Комментарий для jimidini.ya.ru:
Ммм… жаль будет, если откатят. А какой предлагается альтернативный подход?
Комментарий для Евгения Степанищева:
вот альтернативный: http://wiki.php.net/rfc/typecheckingstrictandweak
Комментарий для jimidini.ya.ru:
Этот вариант мне ближе.
Комментарий для Евгения Степанищева:
интереснее, что в php-trunk добавили http://wiki.php.net/rfc/functionarraydereferencing
вот это действительно праздник
p.s. не знаю видел ты или нет, я завёл англоязычный твиттер технической направленности http://twitter.com/jimi_dini
Комментарий для jimidini.ya.ru:
вот это действительно праздник
О!!!! Ура :)
Я твиттером не пользуюсь, но зафолловил.