PHP-Дайджест № 59 – интересные новости, материалы и инструменты (16 – 29 марта 2015)



    Предлагаем вашему вниманию очередную подборку со ссылками на новости и материалы.

    Приятного чтения!


    Новости и релизы


    • CakePHP 3.0.0 — Прошло больше 3 лет с релиза 2.0.0, и вот миру представлена обновленная версия популярного фреймворка. Версия обратно несовместима, требует PHP не ниже 5.4.16, использует Composer. Обновлены многие компоненты, некоторые из которых теперь также доступны в виде независимых библиотек.
    • Релизы PHP: 5.6.7, 5.5.23 и 5.4.39 — Устранены три уязвимости (CVE-2015-0231, CVE-2015-2305, CVE-2015-2331) и исправлено около 30 ошибок.


    PHP


    • Scalar Type Hints — Предложение о скалярном тайп-хинтинге в версии от Энтони Феррара было принято с результатом 108:48. Этому также поспособствовал примирительный пост от Зеева Сураски. Соответствующая ветка уже смержена в PHP 7, а значит, нас ждет возможность явного определения скалярных типов int, float, string и bool для аргументов и значений функций: function foo(int $abc): int. И конечно же, добавлен режим строгой типизации: declare(strict_types=1), при котором несоответствие типа передаваемого или возвращаемого значения будет приводить к ошибке. Поддержка режима проверки типов будет добавлена в том числе для расширений и встроенных функций PHP.
    • RFC: Anonymous Classes — Предложение принято, анонимные классы будут доступны уже в PHP 7.
    • RFC: Generator Return Expressions — Поддержка return в генераторах — принято.
    • RFC: Generator Delegation — Делегирование операций генераторами в Traversable объекты и массивы — принято.
    • RFC: Reclassify E_STRICT notices — Убрать класс ошибок E_STRICT — принято.
    • RFC: Easy User-land CSPRNG — Добавить простой криптографически стойкий генератор псевдослучайных чисел в виде функций random_bytes(int length) и random_int(int min, int max) — принято.
    • PHP 7 Feature Freeze — Обзор уже принятых и находящихся в голосовании предложений. Согласно графику, предложения по новым возможностям для PHP 7 больше приниматься не будут.


    Инструменты


    • Icicle — Библиотека реализует асинхронные возможности в PHP с помощью генераторов.
    • widmogrod/php-functional — Функторы, аппликативные функторы и монады в PHP.
    • Mashape/unirest-php — HTTP-клиент на PHP. Хорошая альтернатива Guzzle.
    • m6w6/pharext — Распространяйте PHP-расширения в виде самоустанавливающихся phar-файлов.
    • Analogue ORM — Реализация Data Mapper для PHP.
    • ircmaxell/PhpGenerics — Экспериментальная реализация обобщений (generics) в PHP.
    • cpliakas/git-wrapper — PHP-оболочка для работы с Git.
    • hnw/php-timecop — Расширение позволяет «изменять» и «замораживать» время, меняя, соответственно, результат вызова функций для работы с датой/временем. Вдохновлен timecop из Ruby-мира.


    Материалы для обучения




    Занимательное




    Спасибо за внимание!
    Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку.
    За фото спасибо Leszek Krupiński.

    Присылайте ссылки на интересные статьи или полезные инструменты, которых не было в PHP-Дайджестах, и ваше имя будет рядом с присланной ссылкой в выпуске.

    Прислать ссылку
    Быстрый поиск по всем дайджестам
    Предыдущий выпуск

    Zfort Group
    112,00
    Компания
    Поделиться публикацией

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

      +2
      Печально, что не взялись за нативные аннотации в php7.
      Имхо аннотации в docblock это дико даже для php :)
        0
        Меня самого передергивало каждый раз когда добавлял аннотации, когда тестировал друпал8, но хоть это и противно зато показалось очень удобным. Но реализация хромает это точно.
        +9
        Чувак, спасибо тебе и респект за работу!
          +1
          Кажется еще не было
          mgdm.net/weblog/php-at-the-speed-of-c/
          как мужик код расчета мандельброта ускорял в 2100% раз, пересобрав его phpшной либо в «развернутый» php код, а потом собрав его в виде расширения
          0
          Спасибо за выпуск!

          Ребята, кто в теме, такой вопрос. А какие реальные минусы у PHP 7? Ну, по сравнению с PHP 5. Сам на PHP не пишу, но стараюсь быть в курсе событий :)
            +6
            Минусы? Нет минусов, это же один и тот же язык, а не альтернатива. Для некоторых обрезание устаревшей функциональности может быть проблемой (она была объявлена устаревшей заранее), но любой нормальный код с 5.5/5.6 на 7 запустится без проблем.
              +3
              Return Type Hints реализованы ужасно, и их использовать в таком виде пагубно для кода. Основные вещи:
              1. Нет Nullable при возврате:
              public function find($id):User {
                  return null;
              }
              

              Приведет к Fatal Error (хотя в нормальных языках возврат null нормальное явление)
              2. Нет «уточнения»
              interface EntityInterface {}
              interface EntiryRepositoryInterface {
                  public function find($id):EntityInterface;
              }
              class User implements EntityInterface {}
              class UserRepository implements EntityRepositoryInterface {
                 public function find($id):User {
                 }
              }
              

              Это также Fatal Error
              3. Переопределение класса и возврат this также не дает указать что мы возвращаем объект насследника, мы указываем тип предка, то-есть автодополнение будет считать что это предок.

              В общем в текущем виде Return Type Hints вообще неюзабельны для классов, но могут нормально использоваться только для скаляров. Пара примеров еще: делал для доклада о HACK vs PHP 7
                0
                Благодарю за ответ.
                  +2
                  Всё это будет исправлено в следующих минорных релизах, как и возврат void
                    +1
                    Ну я могу сказать по каждому из пунктов:
                    1. RFC про Nullable зарегистрирован очень давно, но в обсуждении решили что эта вещь почему-то не нужна, и предложили выкидывать Exception'ы, хотя обещали подумать.
                    2. От этого отказались после первого варианта RFC где это было возможно, из-за того, что поведение не похоже на поведение входящих переменных (там тоже нет «уточнения»), и также падение производительности.
                    3. Также как и с пунктом 2.

                    Но вообще в Hack это есть, и они даже добавили статический анализатор типов для strict режима, который висит как демон, и hhvm просто обращается к нему: есть ошибки? нет, значит пусть приложение работает, если что в любой момент можно Exception выкинуть. И это дает реальный прирост производительности, потому что strict файлы отлично проверены как в Java. К примеру:
                    <?hh //strict
                    class User {
                        protected int $id;
                        public function getId():int {
                            return $this->id;
                        }
                    }
                    
                    class UserManager {
                        public function getIdentifier(User $user):int {
                            return $user->getId();
                        }
                    }
                    


                    Сразу выкинет ошибки:
                    1. protected int $id — не задается в конструкторе и не имеет значение по умолчанию, поэтому нужно пометить как nullable:
                    protected ?int $id;
                    

                    2. метод getId — может возвращать null, нужно пометить что он nullable, то-есть:
                    public function getId():?int{}
                    

                    3. Выход из getIdentifier() может иметь null, нужно пометить.

                    И он очень хорошо просматривает то, какие типы должны использоваться, он в strict режиме запрещает использовать обычные массивы, рекомендует использовать Map, Vector, etc в указанием типа. И большинство ошибок сразу же всплывают во время сохранения файла.
                      +2
                      Считаю не совсем правильным сравнивать типизацию в hack и php: в первом это необходимость, во втором — дополнение.
                      А что касается rfc, никто пока не знает и до конца не понимает, в каком направлении всё это будет развиваться. Надо сначала поиграться с тем, что есть, потом будут какие-то изменения, основанные на практическом применении
                +1
                Я так смотрю, то о чем я писал про phar ещё в 2012, а использовал даже раньше начало доходить даже до Symfony. Может, вам сделать ещё раздел в дайджесте типа «habrahabr PHP flashback»?)
                  +1
                  phar использовали для дистрибьюции Silex еще раньше. Лично мне это кажется не удобным. Да и вообще у меня Docker головного мозга…
                    0
                    Docker это да, тоже пользуюсь.
                    Там немного иначе, Silex как фреймворк подключается, я же больше об альтернативе zip, когда файл имеет какой-то графический или консольный интерфейс, и используется не в виде подключаемого phar, а позволяет развернуть сконфигурированное приложение готовое к работе. Вот опять банально если бы WP вместо zip предлагал скачать phar.
                      +1
                      в 2013-ом фабьен писал how-to как паковать приложения в phar. Но помниться мне были опосения что толку от этого не так много. Еще раньше в твиттере была дискуссия на эту тему, что мол phar не ок. Да и преимуществ это перед тем же zip/tar никаких не дает.
                  +3
                  PHP 7 Feature Freeze.
                  Пора использовать на dev-средах и проверять свои публичные проекты на совместимость.
                    0
                    >> function foo(int $abc): int

                    эмм… значения вида '123' пройдут или фатал эррор вызовут?
                      0
                      В нестрогом режиме (по дефолту) пройдут
                        +2
                        По дефолту работает каст типов. Если может привести типы без потери — все хорошо. Скажем если у вас будет строка '12 monkeys' то вылетит варнинг (или нотис).
                        +1
                        Спасибо, прочитал с удовольствием. С нетерпением жду php7!
                          0
                          Scalar Type Hints — Будет интересно!

                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                          Самое читаемое