PHP-Дайджест № 152 (11 – 25 марта 2019)


    Свежая подборка со ссылками на новости и материалы. В выпуске: свежие RFC предложения и другие новости из PHP Internals, порция полезных инструментов, и много других материалов и новостей!

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


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


    • PHP Russia 2019 – Москва, 17 мая — Прием заявок на доклады подходит к концу и уже есть несколько подтвержденных докладчиков! Прежде всего это топ контрибьюторы PHP-ядра Никита Попов и Дмитрий Стогов, также автор spiral/roadrunner Антон Титов, автор библиотеки PHP-ML для машинного обучения на PHP Arkadiusz Kondas и другие.
    • PHP fwdays'19 – Киев, 1 июня — На конференции в Киеве также намечается интересная программа и уже заявлен создатель Symfony Fabien Potencier.
      Для читателей PHP-Дайджеста скидка 15% по промокоду: PHP-digest-fwdays.
    • Enrico Zimuel присоединился к команде Elastic — После 11 лет работы в Zend, Enrico переходит в Elastic, где будет ответственным за библиотеки PHP для Elasticsearch. Прислал @dmitrybalabka. Интересна дальнейшая судьба других участников команды Zend, которые заявили об уходе из Rogue Wave еще в октябре.

    PHP Internals


    • [RFC] New custom object serialization mechanism — Предложение принято. В PHP 7.4 реализован новый механизм сериализации объектов и добавлено два магических метода:
      Скрытый текст
      // Returns array containing all the necessary state of the object.
      public function __serialize(): array;
       
      // Restores the object state from the given data array.
      public function __unserialize(array $data): void;
      
    • [RFC] JIT — В JIT для PHP реализована поддержка Windows и ZTS. Последнее значит, что можно использовать в многопоточных приложениях. По предложению уже стартовало голосование, судя по ходу которого, вероятно, оно будет принято для PHP 8.0, но идея включить в PHP 7.4 не получит достаточной поддержки.
      В тему также пост с бенчмарками Redis-сервера на PHP clue/php-redis-server, где автор получил прирост ~4-23% на версии с JIT.
    • [RFC] Arrow Functions 2.0 — Третья попытка реализовать короткие лямбды в PHP. На этот раз предлагается синтаксис
      $y = 1;
      $fn1 = fn($x) => $x + $y;
      

      При этом переменные из внешнего скоупа биндятся по значению автоматически и не надо использовать use().
      В Internals также обсуждаются альтернативные варианты синтаксиса:
      ($x) ==> $x + $y;
      

      \($x) => $x + $y;
      
    • [RFC] Generator comprehensionsКонцепт оформлен в полноценное предложение о реализации спискового включения (list comprehension). По сравнению с концептом, как и в коротких лямбдах, нет необходимости использовать use():
      Скрытый текст
      $y = 3;
      $gen = [for $list as $x if $x % 2 yield $x * $y];
      
    • [RFC] Deprecate curly braces array access — На данный момент для доступа к элементам массивов и строк можно использовать как квадратные, так и фигурные скобки. И хотя они эквивалентны, фигурные скобки все-таки не работают, например, для добавления элемента в массив “$arr{} = 1;” или объявления массива “$a={1,2};” . Предлагается задепрекейтить фигурные скобки в данном контексте и оставить только квадратные. А вы используете фигурные скобки?
    • video Подкаст PHP Internals News Episode 2: PHP Compiler and FFI — Anthony Ferrara в гостях у Derick Rethans.
    • Объявлены релиз-менеджеры PHP 7.4 — Ими стали Peter Kokot and Derick Rethans.

    Инструменты


    • API Platform 2.4 — Под капотом MongoDB, Elasticsearch, Mercure, OpenAPI v3, CQRS, HTTP/2 Push.
    • Roave/no-leaks — Плагин для PHPUnit, который поможет обнаружить утечки памяти в приложении и тестах.
    • Roave/Dont — Трейты, которые блокируют использование некоторых магических методов.
    • bobthecow/psysh — Отличная реализация интерактивного режима для PHP. В поддержку свежий пост о том, ruчто такое REPL и Exploratory development.
    • spatie/async — Обертка над PCNTL для простого выполнения параллельных задач. В качестве альтернативы есть еще ackintosh/snidel.
    • King2500/doctrine-phpstorm-meta — Пакет улучшает автодополнение для Doctrine в PhpStorm 2019.1 благодаря .phpstorm.meta.php.
    • biganfa/php2curl — Библиотека позволяет быстро трансформировать текущий контекст ($_REQUEST, $_SERVER, и т.д.) в строку запроса cURL. Прислал catanfa.

    Symfony



    Laravel



    Yii



    Безопасность



    Async PHP



    CMS



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




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


    • ircmaxell/php-compiler — Давно заброшенная идея компилятора для PHP от Anthony Ferrara получила реинкарнацию благодаря FFI в PHP 7.4. Теоретически, компилятор способен генерировать нативный машинный код и выдавать бинарник исполняемый без виртуальной машины PHP. На практике, это пока только концепт, который поддерживает всего ничего, но идея интересная.

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

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

    Больше новостей и комментариев в Telegram-канале PHP Digest.

    Прислать ссылку
    Поиск ссылок по всем дайджестам
    Предыдущий выпуск: PHP-Дайджест № 151

    Поделиться публикацией

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

      0

      Что-то я не понял сути фильтра для ларавель

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

        В общем вроде бы прикольно, но вроде особо то и не надо ;)
          0
          Нечто подобное было в курсе codecourse.com/courses/filtering-in-laravel
        +2
        Вот такой вариант как будто норм
        ($x) ==> $x + $y;

        как вам?
          +1

          "==>" все же уродство как по мне.


          Идеально, конечно, ($x) => $x + $y, но тут см. описанные в rfc проблемы с неоднозначностью синтаксиса и сложностями реализации в рамках используемого парсера.


          Из оставшихся вариантов мне наиболее симпатичен \($x) => $x + $y: "\" как обозначение lambda уже используется в других языках, невозможно ни с чем спутать в хитровложенных конструкциях, просто для реализации, и, кажется, в тривиальном случае с одним аргументом нет проблем с реализацией сокращенного синтаксиса: \$x => $x + $y.

            +1

            Дело в том, что если вы захотите добавить эту лямбду \$x => $x + $y (как и \($x) => $x + $y) в массив, то возникнет неоднозначность при парсинге.

              +1

              Где неоднозначность? \($x) ключом массива быть не может, без стрелочки и тела это ничего не значит. Если бы речь шла о PHP5, я бы еще понял проблему, но в семерке-то AST как-никак.


              Бэкслеш сейчас разделитель неймспейсов, переменные и прочую динамику там использовать нельзя (в явном виде, по крайней мере), соответственно, комбинации \( и \$ это однозначно лямбды.

                0
                Да, вы совершенно правы. В минуту помрачения подумалось про разделитель пространства имен.
                Однако не соглашусь по поводу симпатичности, поскольку обратная черта — это: разделитель пространств имен; экранирующий символ; перекликается с &$x, являясь, по сути, ключевым словом, а не модификатором доступа; то же самое относительно унарных операторов.
                  0

                  В Haskell нормально смотрится. :-)

              +1

              а чем был плох вариант с тильдой?
              x ~> x * y
              (x, y) ~> x + y
              по-моему красиво, лаконично и ни с чем не пересекается.

                0

                Как ниже писал SerafimArts, потому что очень похоже на вызов метода/получения поля у объекта. Попробуй разглядеть волнистая ли линия при беглом просмотре.


                $a->$b;
                $a~>$b;
                  0
                  Решается использованием «правильного» шрифта. Точно так же можно жаловаться на сходство «0» и «O», «I», «l» и "|" и т.п.
                    0

                    Не просто можно, а нужно! Имеено поэтому лучшие шрифты для разработки делают эти символы максимально отличающимися. На хабре в режиме code уже видны отличия.


                    0 O
                    I l |

                    А если взять DejaVu Sans Mono, то разница между этими символами заметка ещё сильнее.

                      0
                      Собственно об этом я и написал :)
                0
                "\" как обозначение lambda уже используется в других языках

                Это, например, в каких? Ну, кроме Haskell.
                  0

                  Elm, например.

                0
                Это самый желанный, но и самый неосуществимый синтаксис. В документе есть секция об этом wiki.php.net/rfc/arrow_functions_v2#x_x_y
                  0
                  Можно тогда -> как в Java, и путаницы меньше.
                    0
                    Эм, нельзя. Потому что это вызов метода/получение поля у объекта.

                    $a->$b; // Это лямбда или вызов поля $b у объекта $a?
                    
                  0

                  Самый нормальный вариант)

                  +5
                  Надо же… век живи — век учись. Про фигурные скобки в массивах узнал только благодаря этому дайджесту. Мне искренне интересно, использует ли это кто либо в больших проектах?
                    +2
                    Собственно противники апеллируют к тому, что используют разный синтаксис для визуального разделения доступа к массиву и к строке.
                    I personally use it because I like to quickly tell if I am doing an operation on a string or array, it is eye candy and makes a lot of sense. I think if anything the two syntaxes should be decoupled instead.

                      0
                      www.php.net/manual/en/language.types.string.php#language.types.string.substr
                      Internally, PHP strings are byte arrays. As a result, accessing or modifying a string using array brackets is not multi-byte safe, and should only be done with strings that are in a single-byte encoding such as ISO-8859-1.

                      Нельзя просто так взять, и обратиться к символу строки как к элементу массива.
                      Разве кто-то ещё разрабатывает проекты на однобайтовых кодировках?
                        +1
                        Можно. Существуют проекты, которые используют поток байтов, а не буквенные символы из строки.

                        Ну вот буквально позавчера развлекался с чтением/записью опкеша напрямую из PHP и там вообще нет намёка на mb_x, а место под структуры резервируется строго в единицах объёма памяти. А сегодня писал функцию, которая под байтовому сдвигу получает линию и позицию в тексте и тот факт, что отрежет половину utf-чара не должен волновать особо.

                        Ну т.е. да, на всяких типовых проектах оно мало где применяется, а в библиотечном коде сплошь и рядом. Вот такие вот дела.
                          0
                          что-нибудь типа такого

                          habr.com/ru/post/315430/#comment_9915398

                          Код php использует официальный протокол Меркуриев и идеи от дядьки, код которого очень помог разобраться в протоколе. В моём примере пароль админа в счётчике заменён на стандартный. По умолчанию адрес счётчика — это последние 2 или 3 цифры в серийном номере. Каждая moxa и её порт опрашиваются параллельно. Запрашиваем по одному все счётчики, висящие на одном порту moxa.

                          Собственно сам код
                            +1
                            Ну так я поэтому и не стал рубить с плеча. В частных случаях может быть полезно, не спорю.
                            Но это опасный функционал, с которым очень легко ошибиться. Тесты код пройдёт, а на живом проекте через полгода лавиной пойдут ошибки, когда какой-нибудь эстет напишет «Résumé».
                      0
                      Ещё есть новый релиз Yii 2
                      www.yiiframework.com/news/203/yii-2-0-17
                        +1
                        [сарказм]
                        Он еще жив что ли?
                        [/сарказм]
                          0
                          SamDark уже давно пора перейти в стан laravel или symfony и прокачивать их =)
                            +2

                            Почему?

                              +4

                              Yii как будто бы уходит со сцены как в свое время codeigniter.

                                +1

                                Не дождётесь :)

                          +5
                          Кстати, мало кем замеченное, но очень знаковое событие — из документации в массовом порядке удаляются все отсылки к PHP 4. Фактически там, где встречались фразы типа «До PHP 5, после PHP 5» остается просто «В PHP».
                            0
                            не знаю как донести до людей «делающих мануал по ПХП», исправьте стили, все остальные — извините за оффтоп
                              0
                              А что конкретно с ними не так?
                                +1
                                1. Какой мануал? Тот, который php.net? Да вроде все нормально там со стилями
                                2. Если обнаружили ошибку, то на каждой странице руководства есть кнопка
                                0
                                все файлы на странице www.php.net/download-docs.php содержат HTML вместо CSS, особенно это раздражает в CHM формате.
                                упс, php_manual_ru.tar.gz исправился
                                php_manual_ru.chm пока нет
                                спасибо, значит услышали

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

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