PHP: хинтование возвращаемого типа
Наконец-то в скором времени (вероятно в седьмой версии) в ПХП появится указание типа возвращаемого значения. Голосование по предложению добавить в язык эту возможность завершилось с огромным перевесом: 49 «за» и 3 — «против».
Вероятно уже в следующем году в языке можно будет указывать возвращаемый тип довольно стандартным образом:
function foo(): array {
return [];
}
Такой синтаксис встречается во многих языках и понятен сразу. Указать можно будет (стандартно для ПХП): имя класса, «array» или «callable». Надеюсь, когда-нибудь можно будет указать и скалярные типы. Пока нет возможности задать тип так, чтобы вместо него можно было вернуть null (иногда это очень удобно), но есть некоторая вероятность, что и эта возможность в языке появится.
Пара слов для чего это надо: во-первых, больше ошибок будет отлавливаться при обращении к таким функциям или методам, во-вторых, специализированные редакторы кода смогут больше сказать программисту о том, что он собирается вызывать, в-третьих, вероятно на этом можно построить какие-то оптимизации при компиляции в байт-код и ещё больше ускорить язык.
Как в http://hacklang.org/ уже сделали под hhvm, удобно.
Комментарий для sarman:
Да, я там это видел, но в ПХП пока нельзя указать разные типы скаляров, как в HHVM.
Комментарий для Евгения Степанищева:
Евгений, увы: «A bug was found during the voting period that will require enough changes to how the RFC works that voting has been cancelled.»
Комментарий для Горбунов Олег:
Эх, вот же… Я не обратил внимания на фразу — RFC большой, весь не стал смотреть. Надеюсь переголосуют с похожим результатом.
Нормальным редакторам и сейчас можно, например так
Комментарий для Паша:
PHPdoc помогает, конечно, но статическая типизация добро не только для программиста, но и для оптимизатора в компиляторе.
Комментарий для Паша:
Ну и phpdoc не выдаст ошибку. Это просто нотация, которую немудрено забыть обновить.
Да, я это понимаю, поэтому и написал что это помощь редакторам.
Комментарий для Евгения Степанищева:
Ситуация изменилась!
https://wiki.php.net/rfc/return_types — RFC прошел в PHP7 и уже даже имеет статус Implemented.
Комментарий для Горбунов Олег:
Да, я видел, спасибо! Даже уже попробовал :)