PHP: хинтование возвращаемого типа

Наконец-то в скором времени (вероятно в седьмой версии) в ПХП появится указание типа возвращаемого значения. Голосование по предложению добавить в язык эту возможность завершилось с огромным перевесом: 49 «за» и 3 — «против».

Вероятно уже в следующем году в языке можно будет указывать возвращаемый тип довольно стандартным образом:

function foo(): array {
    return [];
}

Такой синтаксис встречается во многих языках и понятен сразу. Указать можно будет (стандартно для ПХП): имя класса, «array» или «callable». Надеюсь, когда-нибудь можно будет указать и скалярные типы. Пока нет возможности задать тип так, чтобы вместо него можно было вернуть null (иногда это очень удобно), но есть некоторая вероятность, что и эта возможность в языке появится.

Пара слов для чего это надо: во-первых, больше ошибок будет отлавливаться при обращении к таким функциям или методам, во-вторых, специализированные редакторы кода смогут больше сказать программисту о том, что он собирается вызывать, в-третьих, вероятно на этом можно построить какие-то оптимизации при компиляции в байт-код и ещё больше ускорить язык.

Комментарии 10

sarman № 1
Как в http://hacklang.org/ уже сделали под hhvm, удобно.
Евгений Степанищев (bolknote.ru) автор № 2
Да, я там это видел, но в ПХП пока нельзя указать разные типы скаляров, как в HHVM.
Горбунов Олег № 3
Евгений, увы: «A bug was found during the voting period that will require enough changes to how the RFC works that voting has been cancelled.»
Евгений Степанищев (bolknote.ru) автор № 4
Эх, вот же… Я не обратил внимания на фразу — RFC большой, весь не стал смотреть. Надеюсь переголосуют с похожим результатом.
Паша № 5

Нормальным редакторам и сейчас можно, например так

/**
* Create users by users data array
* @param Array $data — Users data as array
* @return \User[] — Returns array of user objects
*/
private function getUsers (Array $data) {
$users = [];
foreach ($data as $userData) {
$users[] = new \User($userData);
}
> return $users;
> }
Евгений Степанищев (bolknote.ru) автор № 6
PHPdoc помогает, конечно, но статическая типизация добро не только для программиста, но и для оптимизатора в компиляторе.
Евгений Степанищев (bolknote.ru) автор № 7
Ну и phpdoc не выдаст ошибку. Это просто нотация, которую немудрено забыть обновить.
Евгений Степанищев (bolknote.ru) автор № 10
Комментарий для Горбунов Олег:

Да, я видел, спасибо! Даже уже попробовал :)