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

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


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


  • Высокопроизводительный PHP — PHP-PM — Два года назад автор поста опубликовал заметку о запуске Symfony-приложения с помощью ReactPHP. Тогда это позволило получить десятикратный прирост производительности. В посте автор проводит ретроспективу и обзор текущего состояния проекта. Например, сейчас с помощью php-pm так же можно запустить приложения на Laravel, Zend, Drupal.
  • WordPress 4.5 “Coleman” — Вышедшая версия содержит ряд малозаметных улучшений, а вот среди изменений, запланированных на 4.6 можно заметить предложение о реализации PSR-4 автозагрузчика.
  • league/oauth2-server 5.0 — Свежее обновление реализации OAuth 2.0 сервера на PHP. Под капотом поддержка PSR-7, JWT, и множество улучшений. Пост в поддержку.
  • nikic/PHP-Parser 2.1.0


PHP


  • RFC: Attributes — Предлагается реализовать механизм нативных аннотаций в PHP. Синтаксис позаимствован из Hack. Атрибуты не исполняются, но сохраняются в абстрактном синтаксическом дереве PHP и могут быть затем использованы в PHP-расширениях, препроцессорах, и непосредственно в скриптах.
    <<...>>
    <<...>>
    function foo() {}
    

  • RFC: Anonymous Class Lexical Scope — Автор предлагает решить проблему передачи зависимостей в анонимный класс. Для этого предлагается использовать use как в замыканиях:
    $foo = 5;
    $foo = new Bar() use($foo) {
        public $foo;
    };
    

  • RFC: Union Types — Начиная с PHP 5.1 можно явно указывать тип передаваемых параметров, а с PHP 7.0 также тип возвращаемых значений. Предлагается сделать возможным указания множественных типов:
    function (Array | Traversable $in) {
        foreach ($in as $value) {
            echo $value, PHP_EOL;
        }
    }
    

  • RFC: Nullable Types — Также предлагается сделать возможным указание типа, который может быть пустым null:
    function foo_nullable(?Bar $bar) {}
     
    foo_nullable(new Bar); // valid
    foo_nullable(null);    // valid
    foo_nullable();        // invalid
    

  • RFC: Generic Types and Functions — Предложение реализовать генерики (шаблоны) в PHP породило волну обсуждений.
    А как считаете вы, насколько оправдана такая возможность в PHP? Оставляйте свой голос в опросе в конце поста и делитесь мнением в комментариях.


Инструменты


  • teamtnt/tntsearch — Полнофункциональный движок полнотекстового поиска на PHP.
  • PHPMessageBus/messagebus — Реализация шины сообщений (CommandBus, QueryBus, EventBus) на PHP 7.
  • paragonie/csp-builder — Библиотека упрощает внедрение стандарта безопасности Content Securiy Policy, который позволяет защититься от XSS и подобных атак.
  • lavary/crunz — Библиотека для работы с cron-задачами. Позволяет задавать промежутки выполнения в человеко-понятном виде.
  • SerafimArts/Properties — Реализация свойств в PHP на основе phpdoc деклараций. Прислал serafimarts.
  • simplepie/simplepie — Простой парсер Atom/RSS фидов.
  • tightenco/jigsaw — Статический генератор сайтов на основе шаблонизатора Blade. Пост в поддержку.
  • Corollarium/cachearium — Библиотека для кэширования.
  • DusanKasan/Knapsack — Удобная библиотека для работы с коллекциями.
  • leroy-merlin-br/mongolid — ODM для MongoDB.
  • sebastianbergmann/phploc — Классический инструмент для оценки размера проекта.
  • jmespath/jmespath.php — Библиотека реализует язык запросов для JSON-документов.
  • ramsey/uuid — Реализация генератора UUID по стандарту RFC 4122. Пост в поддержку.


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




Аудио и видеоматериалы




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




Спасибо за внимание!

Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку.
Вопросы и предложения пишите на почту или в твиттер.

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

Быстрый поиск по всем дайджестам
< Предыдущий выпуск: PHP-Дайджест № 83

Генерики (шаблоны) в PHP?

Проголосовало 318 человек. Воздержалось 109 человек.

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

Комментарии (15)


  1. HaruAtari
    24.04.2016 23:31
    +2

    > Также предлагается сделать возможным указание типа, который может быть пустым null
    Сейчас такое можно сделать, если указать для аргумента значение по умолчанию null. Но иногда действительно не хватает возможности просто передать null в обязательный аргумент.

    Но больше всего жду возможности вернуть null из метода с явно указанным типом возвращаемого значения. Это единственное, что останавливает меня от применения этой фичи. А очень хочется :)

    Вообще здорово, что PHP движется в эту сторону. А главное, что все указания типов опциональны. Если надо быстро на коленке скрипт накидать, то не придется с этим заморачиваться. А в крупных проектах указание типов будет очень кстати.


    1. vladqa
      25.04.2016 00:35

      Но иногда действительно не хватает возможности просто передать null в обязательный аргумент.

      А как же billion-dollar mistake? Сейчас все языки пытаются избавиться от такой возможности, т.к. это ведет к огромному количеству NPE, а вы хотите это впихнуть в PHP :(

      Имхо, лучше делать ограничения и доп. проверки при использовании nullable-типов, например, как это сделано в Kotlin'е.


      1. HaruAtari
        25.04.2016 00:40

        Вот когда введут option типы, тогда и можно будет от null избавляться.


        1. maxru
          25.04.2016 12:53
          +1

          Для вас уже сделали hack :)


          1. HaruAtari
            25.04.2016 14:33

            Ну так то отдельная тема.
            Просто есть нововведения, которые надо вводить последовательно. Если мы хотим избавиться от null, то сначала нужно предоставить альтернативу ему. Если мы вводом явное указание типов, но надо не просто ввести для галочки, а позаботиться о том, чтобы оно хорошо уживалось с другими фичами языка.

            Например в PHP очень не хватает (лично мне) возможности указывать трейты в качестве типов. Т.е. я указываю, что функция принимает в качестве аргумента любой класс, который реализует такой-то трейт. В скале такое, например, есть. И это очень удобно. Ведь трейты — удобная штука. Дает возможность легко использовать расширение вместо наследования. Но с полиморфизмом беда выходит из-за невозможности указания его в качестве типа.


            1. maxru
              25.04.2016 17:26

              Ну, пока только так:

              To specify a type declaration, the type name should be added before the parameter name. The declaration can be made to accept NULL values if the default value of the parameter is set to NULL.

              Ну в хаке "?" удобнее, конечно.


              1. HaruAtari
                25.04.2016 18:05

                Я думаю в ближайших версиях к этому все равно придут.
                Есть такое RFC.


            1. Fesor
              25.04.2016 19:35
              +1

              указывать трейты в качестве типов


              Это будет очень плохой фичей. Вместо этого трейтам хотят разрешить имплементить интерфейсы.


              1. HaruAtari
                25.04.2016 23:45

                Да. Это хорошее решение будет, если примут.


  1. SamDark
    25.04.2016 01:57
    +6

    Очень жду Nullable Types. Не везде null-object подходит.


  1. gogolinsky
    25.04.2016 09:54
    +1

    Отличная подборка, спасибо!
    Заинтересовала вот эта библиотека teamtnt/tntsearch.
    Как вы собираете такой дайджест?


    1. Megas
      25.04.2016 15:06

      Интересно бы посмотреть на бенчмарк этой библиотеки. Если будете пробовать её, то дайте знать обществу:
      Как быстро ищет в базе с миллионами записей?
      Сколько памяти ест?
      На сколько нагружает проц?
      На сколько легко добавляются/удаляются записи из индекса?
      И т.д.


  1. zizop
    25.04.2016 14:38

    Интересен комментарий автора ReactPHP на тему PHP-PM:

    PHP-PM, manages ReactPHP processes (see Bring High Performance Into Your PHP App)
    benchmarks showed it wasn't much faster than vanilla Symfony, which might be due to configuration issues

    Кто-нибудь реально юзал кого-нибудь из этих зверей?


    1. andrewnester
      25.04.2016 16:13

      если не ошибаюсь, fesor. по крайней мере, он часто его упоминает :) лично у меня его так и не получилось нормально завести для Laravel


      1. Fesor
        25.04.2016 17:48

        Использую в «продакшене» на личном проектике (правда там не symfony а только отдельные его компоненты). На коммерческих проектах пока не доводилось, только reactphp сам по себе использую.

        По сути в моем случае из stateful сервисов пришлось только с доктриной повозиться (просто отчищать unit of work после каждого запроса, что не сложно). А вот целую laravel так запускать наверное сходу не выйдет, уж слишком много там stateful штук может быть.

        По поводу использования в продакшен: https://twitter.com/MarcJSchmidt/status/723480541572554753