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



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

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


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




    PHP


    • must read Scalar Type Hints — Эпопея по поводу тайп-хинтинга для скаляров продолжается. На рассмотрении три предложения:
      1. RFC: Coercive Types for Function Arguments с принудительным привидением типов
      2. RFC: Scalar Type Declarations с двойным режимом — строгая и слабая типизация
      3. RFC: Basic Scalar Types — компромиссный вариант на случай если оба предыдущих не пройдут
      Для второго варианта было предложено изменить способ задания вида типизации — вместо declare() использовать специальный колбэк. Голосование по второму предложению заканчивается уже завтра. Ну а пока запасаемся ПХПопкорном.
    • must read RFC: Exceptions in the engine — Практически единогласно принято предложение реализовать в PHP 7 вместо фатальных ошибок обычные исключения. Также станет возможным отлавливать ошибки парсинга. Кроме этого, введена новая иерархия для того, чтобы код использующий отлов всех исключений catch(Exception $e) случайно не ловил фатальные ошибки и ошибки парсинга. Введен новый базовый тип BaseException, который непосредственно расширяется типами EngineException, ParseException и собственно Exception.
    • RFC: Consistent Function Names — Одной из самых часто выдвигаемых претензий к PHP является неконсистентность именования функций и последовательности параметров. Предлагается переименовать функции, а для старых имен реализовать алиасы. Прилагается внушительный список функций-кандидатов на переименование.
    • RFC: Strict Argument Count On Function Calls — Предложение предполагает, что интерпретатор должен выдавать предупреждение, когда функция вызывается с числом аргументов превышающим предусмотренное сигнатурой. Пост в поддержку.
    • RFC: Anonymous Classes — Стартовало голосование по предложению о реализации анонимных классов в PHP.
    • RFC: Easy User-land CSPRNG — Предлагается добавить простой криптографически стойкий генератор псевдослучайных чисел в виде функций random_bytes(int length) и random_int(int min, int max).
    • RFC: Generator Delegation — Предлагается реализовать синтаксис yield from <expr> позволяющий генераторам делегировать операции Traversable объектам и массивам.
    • RFC: Generator Return Expressions — Необходимое для предыдущего предложения изменение — поддержка return в генераторах.
    • RFC: Reclassify E_STRICT notices — Предлагается избавиться от класса ошибок E_STRICT — некоторые перенести в другие классы, а неактуальные убрать.


    Инструменты


    • Webiny Framework — Еще один PHP-фреймворк и пост с обзором.
    • klermonte/zerg — Небольшая библиотека для парсинга структурированных бинарных файлов.
    • wapmorgan/HttpServer — Http-сервер полностью написанный на PHP.
    • briannesbitt/Carbon — Удобная обертка над функциями работы с датой и временем в PHP.
    • jbroadway/urlify — Библиотека для генерации урлов (slug), поддерживает транслитерацию. Порт URLify.js из Django.
    • Dashbrew — Сборка Vagrant-бокса с удобной конфигурируемой средой для разработки PHP-приложений.
    • maknz/slack — Библиотека для отправки и приема сообщений из Slack.
    • Boris — Отличный REPL для PHP.
    • cartalyst/converter — Библиотека для конвертации значений из различных систем измерения.
    • FastRoute — Обновился быстрейший роутер от Никиты Попова. В версии 0.4.0 добавлена возможность регистрации роута с несколькими методами одним вызовом.
    • Graphene — Графовая база данных на PHP + MySQL.
    • phrep — Препроцессор макросов для PHP.
    • mcordingley/Regression — Библиотека реализующая базовые алгоритмы регрессионного анализа.
    • bound1ess/adviser — CLI-инструмент для проверки PHP проектов на наличие readme/license/contributing файлов, правильные настройки Git-репозитория и Composer-манифеста, поддержку PSR-2, SemVer и т.п.


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




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


    • must readvideo PHP must watch — Сборник рекомендуемых к просмотру видеозаписей по PHP.
    • video ZF3 SF meetup — О Zend Framework 3 от Matthew Weier O'Phinney.


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




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

    Zfort Group
    0.00
    Company
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 39

      0
      Чувствую php7 будет обновлен по полной, начиная с производительности, заканчивая кучей фич, которых так не хватало.
      Хотя вроде Дмитрий Стогов говорил, что JIT появится только после релиза версии с вмерженной phpng.
      PS
      ↑↑↓↓←→←→ba↵

      Напоминает выполнение fatality в MK.
        0
        ↑↑↓↓←→←→ba↵ — en.wikipedia.org/wiki/Konami_Code
          +2
          Чувствую php7 будет обновлен по полной, начиная с производительности, заканчивая кучей фич, которых так не хватало.

          Я вот каждую неделю заглядываю на rfc. И если раньше успевал выучить новые фичи до выхода самого языка (5.5, 5.6), то сейчас даже понять всю глобальность изменений не успеваю. Такое ощущение, что 7ой пых будет вообще совершенно новым языком, столько они туда всунули, движуха там безумная творится. Действительно, только попкорном и можно запасаться.
            +1
            Ну JIT-а не будет на уровне языка пока что. То, что они открыли, это не JIT, это сложно как-то назвать вообще. Нормальный жит возможно будет позже, либо в 7.1, либо в виде экстеншена.
            0
            > Библиотеки доступны для всех популярных языков, включая PHP.
            > Libraries for Objective-C, PHP and C# are in development

            На гитхабе их вроде тоже нету.
            +2
            jbroadway/urlify — Библиотека для генерации урлов (slug), поддерживает транслитерацию. Порт URLify.js из Django.

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

            Для транслита следует использовать php.net/manual/en/class.transliterator.php
              0
              По мне использование своих либ помимо встроенных гостовских происходит потому, что не всем нравится эти правила транслита. К примеру, там «х» это «kh» и прочее.
                –1
                ну а какой вариант может быть кроме kh?
                intl предоставляет разные инструменты. не обязательно свой велосипед лепить, изначально криво работающий.
                  0
                  «khockey»?
                    0
                    а как? hudozhnik?
                    0
                    ну почему просто не использовать h?
                    Мы же так и читаем «кх» зачем там лишний звук. Или «x» вместо «ks»
                      +1
                      потому что есть правила транслитерации. то, что вы используете какие-то свои правила, не отменяет правил общих.
                0
                Также станет возможным отлавливать ошибки парсинга.
                А для чего это может понадобится?
                  +2
                  Например, выводить ошибки красиво вот так:

                  image
                    +1
                    Это и сейчас можно, просто не очень тривиально и недостаточно надёжно.
                      0
                      Небольшой оффтоп:
                      Не могу не упомянуть про github.com/filp/whoops (1966 звёздочек, что говорит о крутости пакета).

                      Ну просто потому, что умеет открывать место ошибке в редакторах, конвертировать данные в формат для newrelic (и прочих, вместе с монологом) или показывать полный трейс с состоянием на каждый момент выполнения программы. Да и ставится одной строкой, что исключает «не очень тривиально».
                        0
                        Похожий проект: github.com/JosephLenton/PHP-Error
                          0
                          Это всё понятно. Под «не очень тривиально» я имел ввиду не использование готового, а написание своего. Если whoops поднимет требования до PHP7, а рано или поздно это случится, его код прилично похудеет.
                            0
                            Ну это само собой. Кстати, а почему Yii2 не использует whoops? Он же вроде как и качественнее и больше информации предоставляет, и разгрузка для комьюнити (перекладывание ответственности).

                            UPD. Имею ввиду, что может в нём какие-то подводные камни есть, о которых следует знать и из-за которых вы от него отказались?
                              +1
                              Мы Yii 2.0 начали когда его ещё не было, в середине 2011. Whoops только только начали разрабатывать в середине 2013-го, к этому моменту уже была выпущена публичная версия Yii 2.0, выкидывать уже отлично работающий код и заменять его тогда ещё сырым whoops было явно плохим решением.
                      +2
                      Самое важное, что это позволит разрабатывать долгоживущие процессы, которые не будут падать из за подобных ошибок.
                      Ещё бы как-нибудь exit и die можно было бы выключить, было бы вообще прекрасно.
                        +4
                        PHP активно готовится не умирать.
                      0
                      Как всегда — огромное спасибо за новости!
                        +1
                          0
                          Да да, слежу за ними, но анонс совсем скромный, поэтому решил дождаться уже финального релиза.
                          +1
                          RFC: Consistent Function Names — наконец-то!
                            0
                            Добавьте апдейт, что STH Dual Mode был принят, драма из овер.
                              0
                              Жаль, лично мне он не особо нравился. По-моему вариант с:
                              function foo( int $a, float $b ) {} // строгий каст
                              
                              function foo( (int)$a, (float)$b ) {} // с привидением типов
                              

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

                                Я лично вижу лучший вариант только просто строгие типы, но это за гранью возможного.
                                  0
                                  Строгие типы доступны в виде SPL расширения, а также можно использовать аннотации (например вместе с doctrine annotaions пакетом). А вообще да, наверное лучше определять логику пользователем.
                              0
                              По поводу «эпопеи тайп-хинтинга» — простите за крамолу, но, кажется, не так он и нужен.
                              То есть я воинствующий адепт типизации и всё такое.
                              Но всё равно как бы не сделали, это будут полумеры, криво и в рантайме, то есть тормозов больше чем пользы.

                              С другой стороны IDE поддерживают phpdoc с указаниями и скаляров и типизированных массивов и перечисления типов.
                              Мне phpStorm на такие ошибки указывает, которые встроенный тайпхинтинг никогда не нашёл бы. И всё это статично.
                              Имхо, в подобном направлении статичного анализа и стоило бы развиваться.
                                0
                                Boris — Отличный REPL для PHP

                                Лучше берите сразу psysh.org, он во многих случаях лучше. Некоторое время назад проводил батл между ними: www.slideshare.net/OleggOleg/php-shell-40963434, с тех пор PsySH стал еще лучше
                                  0
                                  Я бы сказал не «во многих», а во всех. Boris проигрывает в хламидомонаду псишу по всем мыслимым пунктам =)
                                    0
                                    Использую PsySH, но справедливости ради в Boris лучше

                                    • обработка бесконечного цикла
                                    • обработка ^C
                                    • формат конфигурации (мне ООП DSL нравится больше чем ассоциативные массивы)
                                      0
                                      С последним пунктом не могу не согласиться, но что значат первые два? На практике.
                                        0
                                        Зависит от природы практики, но если внутри REPL происходит бесконечный цикл, то в PsySH мы не увидим вывода того что происходит в итерациях. При этом по ^С он вовсе закроется (с потерей состояния) что для REPL, по моему мнению, большой минус, т.к. он не должен быть хрупким. Но лично я в такую ситуацию попадал лишь однажды.
                                          0
                                          Проверил только что — PHP 5.6 и 5.5, действительно есть такая проблема (с циклами), в отличие от boris, раньше не замечал, благодарю.

                                          После ^C Boris закрывается перманентно (сразу же, без вопросов), psysh при этом спрашивает «Terminate batch job (Y/N)?» (т.е. ситуация ровно противоположная). Опять же — только что проверил.

                                Only users with full accounts can post comments. Log in, please.