PHP-Дайджест № 134 (24 июня – 8 июля 2018)


    В выпуске: 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

    Zfort Group

    295,00

    Компания

    Поделиться публикацией
    Комментарии 25
      +1
      Этот выпуск оказался «более лучше» полезен, чем предыдущие. Спасибо за подборку!
        +2
        Стартовало голосование по добавлению дружественных классов. Дружественный класс имеет доступ к private и protected полям класса, в котором он объявлен дружественным.

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

        Как-то очень спорно.
        Страшно представить, к какой адской запутанности кода может привести подобное решение.
          0
          Тоже считаю это вредоносным предложением. Вон в C++ добавили дружественные классы, так теперь мучаются с ними.
            +1
            Голосующие товарищи видимо с вами согласны. А вот мне наоборот, нравится идея. Использовал бы дружбу повсеместно в домене для лучше инкапсуляции. Например стало бы возможно запретить любое изменение связанной сущности кроме как через агрегат.
              0
              О какой лучшей инкапсуляции можно говорить в контексте предоставления доступа к приватным полям сторонним объектам?
                0
                Пример:
                Class User 
                 public function updatePost($args)
                 {
                  if ($this->status->isPrymary()){
                     $this->post()->update($args);
                  }
                 }


                Итого берем аггрегат, проверяем какие то бизнес правила, обновляем пост. Другому программисту поставили задачу реализовать обновление поста в другом месте, он извлекает пост — обновляет — кладет в хранилище. Заботливо спроектированный защитный метод пошел по ветру.
                Я хочу сказать что если сущность x является частью агрегата y то мне нужен способ инкапсулировать работу с x через y. Это лучше чем просто следовать эвристике «делаем все через корень агрегата».
                  0
                  Может быть разумнее было бы расширить список модификаторов доступа? Например, модификатор package в java или модификаторы в c# решают подобные проблемы куда изящнее.
                    +1
                    Согласен. Но касательно friends аргумент в стиле «это приведет к запутанности кода» выглядит по меньше мере странно. Есть те же трейты которыми код можно запутать уж точно не меньше. Простое правило — нужно используй, не нужно — не используй, вполне решает данную проблему.
                      +1
                      Это правило не решает проблемы legacy кода от любителей модного и молодежного
                        0
                        По моему лучше «обрабатывать» таких любителей. Исключить/не включить 1 фичу уж точно не выход.
              0

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

              +1
              Не используйте ассоциативные массивы, вообще говоря, никогда
              Я бы не был настолько категоричен, только если речь идёт об очень больших массивах. Делал своё мини исследование на эту тему в рамках highloadcup. Автору удалось уменьшить использование памяти в 2 два раза, у меня с помощью разбивки одного ассоциативного массива на несколько SplFixedArray получалось уменьшить расход памяти в 8,5 раз.
                0
                Тоже подумал сразу о SplFixedArray. Но сейчас с приходом PHP 7 (7.3 в большей степени) показатели уже не такие плохие.
                  0
                  Но сейчас с приходом PHP 7 (7.3 в большей степени) показатели уже не такие плохие.
                  Ссылаться на тесты php 5 в 2018 году не имеет никакого смысла, конечно же все мои тесты были на php 7, на гитхабе об этом написано, а php 7.3, насколько мне известно, ещё не зарелизился.
                –9

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

                  +1
                  А как это относится к теме?
                    +4
                    Спасибо за информацию.
                      +1
                      А зачем на Yii 1-ой версии, а не на Yii 2-ой версии?
                        0

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

                      +6
                      Держите нас в курсе.
                      0
                      CMS: Вышла новая версия CMS на Symfony eZ Platform 2.2: новость в блоге, GitHub.
                        0
                        Касательно «Phpdbg намного быстрее Xdebug для подсчета покрытия» — есть сомнения, что результаты покрытия совпадают, о чем предупреждает сам автор Xdebug. Стоит отнестись с осторожностью:

                        hackernoon.com/generating-code-coverage-with-phpunite-and-phpdbg-4d20347ffb45
                          +1
                          хочу себе блестящего слоника)
                            0
                            Ради бога извините, но не мог не вспомнить о всей палитре красок :)
                            image

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

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