PHP-Дайджест № 84 – интересные новости, материалы и инструменты (10 – 24 апреля 2016)



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

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


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


    • Высокопроизводительный 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?

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

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

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

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

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

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

        Имхо, лучше делать ограничения и доп. проверки при использовании nullable-типов, например, как это сделано в Kotlin'е.
          0
          Вот когда введут option типы, тогда и можно будет от null избавляться.
            +1
            Для вас уже сделали hack :)
              0
              Ну так то отдельная тема.
              Просто есть нововведения, которые надо вводить последовательно. Если мы хотим избавиться от null, то сначала нужно предоставить альтернативу ему. Если мы вводом явное указание типов, но надо не просто ввести для галочки, а позаботиться о том, чтобы оно хорошо уживалось с другими фичами языка.

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

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

                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.

                Ну в хаке "?" удобнее, конечно.
                  0
                  Я думаю в ближайших версиях к этому все равно придут.
                  Есть такое RFC.
                  +1
                  указывать трейты в качестве типов


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

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

            +1
            Отличная подборка, спасибо!
            Заинтересовала вот эта библиотека teamtnt/tntsearch.
            Как вы собираете такой дайджест?
              0
              Интересно бы посмотреть на бенчмарк этой библиотеки. Если будете пробовать её, то дайте знать обществу:
              Как быстро ищет в базе с миллионами записей?
              Сколько памяти ест?
              На сколько нагружает проц?
              На сколько легко добавляются/удаляются записи из индекса?
              И т.д.
              0
              Интересен комментарий автора 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

              Кто-нибудь реально юзал кого-нибудь из этих зверей?
                0
                если не ошибаюсь, fesor. по крайней мере, он часто его упоминает :) лично у меня его так и не получилось нормально завести для Laravel
                  0
                  Использую в «продакшене» на личном проектике (правда там не symfony а только отдельные его компоненты). На коммерческих проектах пока не доводилось, только reactphp сам по себе использую.

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

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

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

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