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

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

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

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

sarman (инкогнито)
13 ноября 2014, 08:33

Как в http://hacklang.org/ уже сделали под hhvm, удобно.

Евгений Степанищев (bolknote.ru)
13 ноября 2014, 09:05, ответ предназначен sarman

Да, я там это видел, но в ПХП пока нельзя указать разные типы скаляров, как в HHVM.

Горбунов Олег (инкогнито)
13 ноября 2014, 09:20, ответ предназначен Евгений Степанищев (bolknote.ru):

Евгений, увы: "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)
13 ноября 2014, 09:26, ответ предназначен Горбунову Олегу

Эх, вот же… Я не обратил внимания на фразу — RFC большой, весь не стал смотреть. Надеюсь переголосуют с похожим результатом.

Паша (инкогнито)
1 декабря 2014, 04:00

Нормальным редакторам и сейчас можно, например так
/**
* 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)
1 декабря 2014, 08:05, ответ предназначен Паше

PHPdoc помогает, конечно, но статическая типизация добро не только для программиста, но и для оптимизатора в компиляторе.

Евгений Степанищев (bolknote.ru)
1 декабря 2014, 10:57, ответ предназначен Паше

Ну и phpdoc не выдаст ошибку. Это просто нотация, которую немудрено забыть обновить.

Паша (инкогнито)
1 декабря 2014, 22:57

Да, я это понимаю, поэтому и написал что это помощь редакторам.

Горбунов Олег (инкогнито)
17 февраля 2015, 06:18, ответ предназначен Евгений Степанищев (bolknote.ru):

Ситуация изменилась!
https://wiki.php.net/rfc/return_types — RFC прошел в PHP7 и уже даже имеет статус Implemented.

bolknote.ru (bolknote.ru)
17 февраля 2015, 11:27, ответ предназначен Горбунову Олегу

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

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)