В выпуске: PHP 7.3.0 alpha 3, PHPStan 0.10, Yii 1.1.20 и другие релизы, свежее предложение из PHP Internals по сравнению объектов, порция полезных инструментов, и многое другое.
Приятного чтения!


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



PHP Internals


  • habr PHP 8: чего ждать. Письмо Зеева Сураски
    Демо производительности PHP 7.0 vs JIT PoC для генерации фракталов
  • [RFC] Class Friendship — Стартовало голосование по добавлению дружественных классов. Дружественный класс имеет доступ к private и protected полям класса, в котором он объявлен дружественным.
  • [RFC] User-defined object comparison — В документе рассмотрены проблемы сравнения объектов в PHP. Предлагается добавить два новых магических метода: __compareTo и __equals.
    Скрытый текст
    class Example
    {
        /**
         * Returns: < 0 if $this is less than $other,
         *          > 0 if $this is greater than $other,
         *         == 0 if $this is equal to $other.
         */
        public function __compareTo($other): int
        {
            ...
        }
     
        /**
         * @returns bool TRUE if $this is equal to $other, FALSE otherwise.
         */
        public function __equals($other): bool
        {
            ...
        }
    }
    
  • dstogov/php-tensorflow — Благодаря реализации FFI, станет возможным делать легковесные биндинги для сторонних библиотек. В качестве примера Дмитрий Стогов демонстрирует обертку над TensorFlow.


Инструменты


  • Infection 0.9.0 — Обновление фреймворка для мутационного тестирования на основе AST.
  • PHPStan 0.10 — Мощный статический анализатор для PHP. Онлайн-песочница для проверки кода.
  • sebastianfeldmann/phpbu — Инструмент для создания резервных копий файлов и баз данных. Умеет шифровать бэкапы и отправлять в хранилища.
  • leviy/release-tool — CLI-инструмент для релиза новых версий продуктов.
  • mediact/dependency-guard — Инструмент покажет неиспользуемые composer-зависимости. А также те, которые используются в коде, но установлены как dev-зависимости.
  • ackintosh/snidel — Позволяет легко выполнять код параллельно в форке процесса. Альтернатива spatie/async
  • php-lock/lock — Реализация мьютекса для PHP с поддержкой различных адаптеров (flock, memcache, mysql, redis, ...). Альтернатива symfony/lock.
  • Imangazaliev/DiDOM — Простая и быстрая библиотека для парсинга HTML. Свежий туториал в поддержку.


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




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




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




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

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

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

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


  1. porn
    09.07.2018 02:20

    Этот выпуск оказался «более лучше» полезен, чем предыдущие. Спасибо за подборку!


  1. rjhdby
    09.07.2018 10:10

    Стартовало голосование по добавлению дружественных классов. Дружественный класс имеет доступ к private и protected полям класса, в котором он объявлен дружественным.

    Class Friendship allows a class to be better encapsulated by granting per-class access to protected members.

    Как-то очень спорно.
    Страшно представить, к какой адской запутанности кода может привести подобное решение.


    1. molchanoviv
      09.07.2018 10:28

      Тоже считаю это вредоносным предложением. Вон в C++ добавили дружественные классы, так теперь мучаются с ними.


    1. godzie
      09.07.2018 12:02

      Голосующие товарищи видимо с вами согласны. А вот мне наоборот, нравится идея. Использовал бы дружбу повсеместно в домене для лучше инкапсуляции. Например стало бы возможно запретить любое изменение связанной сущности кроме как через агрегат.


      1. rjhdby
        09.07.2018 12:43

        О какой лучшей инкапсуляции можно говорить в контексте предоставления доступа к приватным полям сторонним объектам?


        1. godzie
          09.07.2018 13:02

          Пример:

          Class User 
           public function updatePost($args)
           {
            if ($this->status->isPrymary()){
               $this->post()->update($args);
            }
           }


          Итого берем аггрегат, проверяем какие то бизнес правила, обновляем пост. Другому программисту поставили задачу реализовать обновление поста в другом месте, он извлекает пост — обновляет — кладет в хранилище. Заботливо спроектированный защитный метод пошел по ветру.
          Я хочу сказать что если сущность x является частью агрегата y то мне нужен способ инкапсулировать работу с x через y. Это лучше чем просто следовать эвристике «делаем все через корень агрегата».


          1. delight-almighty
            09.07.2018 23:59

            Может быть разумнее было бы расширить список модификаторов доступа? Например, модификатор package в java или модификаторы в c# решают подобные проблемы куда изящнее.


            1. godzie
              10.07.2018 13:02
              +1

              Согласен. Но касательно friends аргумент в стиле «это приведет к запутанности кода» выглядит по меньше мере странно. Есть те же трейты которыми код можно запутать уж точно не меньше. Простое правило — нужно используй, не нужно — не используй, вполне решает данную проблему.


              1. rjhdby
                10.07.2018 13:34
                +1

                Это правило не решает проблемы legacy кода от любителей модного и молодежного


                1. godzie
                  10.07.2018 14:13

                  По моему лучше «обрабатывать» таких любителей. Исключить/не включить 1 фичу уж точно не выход.


    1. zim32
      10.07.2018 10:42

      Аьв недавно столкнулся с такой необходимостью. К примеру паттерн билдер где работа делегируется объектам и не хочется все методы делатт паблик


  1. morozovsk
    09.07.2018 10:40
    +1

    Не используйте ассоциативные массивы, вообще говоря, никогда
    Я бы не был настолько категоричен, только если речь идёт об очень больших массивах. Делал своё мини исследование на эту тему в рамках highloadcup. Автору удалось уменьшить использование памяти в 2 два раза, у меня с помощью разбивки одного ассоциативного массива на несколько SplFixedArray получалось уменьшить расход памяти в 8,5 раз.


    1. ZloAdmin
      10.07.2018 10:28

      Тоже подумал сразу о SplFixedArray. Но сейчас с приходом PHP 7 (7.3 в большей степени) показатели уже не такие плохие.


      1. morozovsk
        10.07.2018 12:12

        Но сейчас с приходом PHP 7 (7.3 в большей степени) показатели уже не такие плохие.
        Ссылаться на тесты php 5 в 2018 году не имеет никакого смысла, конечно же все мои тесты были на php 7, на гитхабе об этом написано, а php 7.3, насколько мне известно, ещё не зарелизился.


  1. seregazolotaryow64
    09.07.2018 12:25

    Сейчас на Yii 1.1.15 делаю сайт благотворительного фонда. В этом мне помогает мамина коллега по ОНФ. Доверяю этой версии после изучение книги Дронова по HTML5 и PHP. Именно он использовал эту версию фреймворка. Эту книгу мне подарили на Новый 2018 Год.
    Остался месяц и сайт будет готов на этом фреймворке.


    1. molchanoviv
      09.07.2018 13:12
      +1

      А как это относится к теме?


    1. Pinsky
      09.07.2018 13:17
      +1

      Спасибо за информацию.


    1. xRay
      09.07.2018 13:56
      +1

      А зачем на Yii 1-ой версии, а не на Yii 2-ой версии?


      1. seregazolotaryow64
        09.07.2018 19:09

        Последую примерами из книги Дронова. Эта версия хорошая, компактная и имеются редкие ошибки. Работает более хорошо. Скачал с гитарой через рабочий браузер.


        1. seregazolotaryow64
          09.07.2018 19:19

          Извини, с гита


    1. xotey83
      09.07.2018 16:01
      +5

      Держите нас в курсе.


  1. nickskitev
    09.07.2018 16:52

    CMS: Вышла новая версия CMS на Symfony eZ Platform 2.2: новость в блоге, GitHub.


  1. vlfesko
    09.07.2018 23:58

    Касательно «Phpdbg намного быстрее Xdebug для подсчета покрытия» — есть сомнения, что результаты покрытия совпадают, о чем предупреждает сам автор Xdebug. Стоит отнестись с осторожностью:

    hackernoon.com/generating-code-coverage-with-phpunite-and-phpdbg-4d20347ffb45