Пишу, по большей части, про историю, свою жизнь и немного про программирование.

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

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

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

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

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

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

10 комментариев
sarman 2014

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

Евгений Степанищев (bolknote.ru) 2014

Комментарий для sarman:

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

Горбунов Олег 2014

Комментарий для Евгения Степанищева:

Евгений, увы: «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) 2014

Комментарий для Горбунов Олег:

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

Паша 2014

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

/**

  • 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) 2014

Комментарий для Паша:

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

Евгений Степанищев (bolknote.ru) 2014

Комментарий для Паша:

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

Паша 2014

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

Горбунов Олег 2015

Комментарий для Евгения Степанищева:

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

Евгений Степанищев (bolknote.ru) 2015

Комментарий для Горбунов Олег:

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