PHP-Дайджест № 90 – интересные новости, материалы и инструменты (1 – 14 августа 2016)



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

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


    • PHP 7.1.0 Beta 2 — Следующая бета ожидается 18 августа и станет последней перед RC1.
    • CakePHP 3.3.0 — Под капотом поддержка PSR-7 Middleware и другие улучшения.
    • PHP FIG 3.0 — Предлагается реформировать группу FIG для более продуктивной работы. Полное описание новой структуры и процессов можно найти тут.
    • Symfony Moscow Meetup — Symfoniacs — #9 — 25 августа в Москве пройдет 9-я встреча PHP/Symfony разработчиков.

    • PHP Frameworks Day 2016 — 3 сентября в Киеве пройдет масштабная ежегодная конференция посвещенная PHP.



      Программа уже сформирована. Среди заявленных докладчиков:


      Специально для читателей PHP-Дайджеста доступен промокод «PHPDIGEST» со скидкой 15%.

    PHP


    • RFC: Immutable classes and properties — Черновик предложения по реализации неизменяемых классов и свойств:

      immutable class Email {
        public $email;
       
        public function __construct ($email) {
          $this->email = $email;
        }
      }
       
      $email = new Email("foo@php.net");
      $email->email = "bar@php.net" // Вызов повлечет Fatal Error
      

    • RFC: Arrow Functions — В прошлом году предложение по короткому синтаксису $x ~> $x * 2 для анонимных функций не прошло голосование. Затем был предложен альтернативный синтаксис, а-ля EcmaScript 6, но с добавлением ключевого слова function: function($x) => $x + $y . Сейчас предложение обновлено и выносится на рассмотрение синтаксис: ^(parameter_list) => expr

      $y = 1;
       
      $versionA = ^($x) => $x + $y;
       
      // Эквивалентно
      
      $versionB = function($x) use($y) {
          return $x + $y;
      };

    Инструменты


    • Sqon/sqon — Самовыполняющийся архив PHP. Альтернатива формату Phar от автора box-project/box2.
    • malkusch/lock — Библиотека для синхронизации одновременно выполняющихся потоков с помощью мьютексов.
    • pinepain/php-ref — Расширение для PHP 7, которое добавляет поддержку мягких и слабых ссылок в PHP.
    • OndraM/ci-detector — Позволяет определить используемый CI-сервер и получить данные о билде.
    • cakephp/chronos — Библиотека для работы с датой и временем на PHP. Переработанный и дополненный Carbon. Пост с описанием и примерами.
    • opis/string — Минибиблиотека для работы с многобайтными строками ОО стиле и без зависимостей.
    • PrivateBin/PrivateBin — Минималистичный клон pastebin с шифрованием в браузере.
    • florianv/swap — Библиотека позволяет получать курсы валют от различных провайдеров.
    • egulias/EmailValidator — Валидатор email-адрессов с несколькими стратегиями.
    • globalcitizen/php-iban — Библиотека для работы с международными номерами банковских счетов IBAN.
    • webmozart/assert — Еще одна библиотека для валидации данных.
    • webmozart/key-value-store — Библиотека предоставляет абстрактный API для работы различным key-value хранилищами.
    • akalongman/php-telegram-bot — Пакет для создания Telegram бота.
    • Postleaf/postleaf — Блоговая платформа с инлайн редактированием.

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



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



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

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

    Присылайте ссылки на интересные статьи или полезные инструменты, которых не было в PHP-Дайджестах, и ваше имя будет рядом с присланной ссылкой в выпуске.

    » Прислать ссылку
    » Быстрый поиск по всем дайджестам
    Предыдущий выпуск: PHP-Дайджест № 89
    Zfort Group
    113,00
    Компания
    Поделиться публикацией

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

      +3
      Спасибо, Роман!
        +2
        Всегда пожалуйста!
        +1
        Спасибо за очередной дайджест!
          +1
          $email->email = "bar@php.net" // Вызов повлечет Fatal Error

          Мне кажется, для immutable классов такой вызов можно отследить еще на этапе парсинга скрипта до реального исполнения. Это ведь присваивание свойству класса, который объявлен неизменяемым.

            +1
            class MyClass1 
            {
                public $email;
            }
            
            immutable class MyClass2 
            {
                public $email;
            }
            
            $class = new ('MyClass' . random_int(1, 2));
            
            $class->email = 'some@any.com';

            Ну и как отследить?

              0

              Я имел ввиду конкретную ситуацию, которая приведена как пример в RFC.

              0
              Я не очень понимаю, что мешает сейчас сделать private свойство и для нее магический метод __get?
                +4
                Ну тогда уж лучше просто геттер без сеттера
                  0
                  Производительность.
                  0
                  Мне кажется php слишком динамический для статичексокго анализа :)

                  class A {
                    public $property;
                  }
                  
                  $str = 'property';
                  (new A)->{$str} = 123;
                  
                    +1

                    Я думаю, в любом языке есть ситуации, которые трудно проанализировать статически. Но если число статических вызовов у вас в коде достаточно велико, пользу из статического анализа все же можно извлечь.

                  0
                  Ссылки на видео о php конечно хорошо, но то что там все кроме одного говорят в микрофон вебкамеры, разобрать что-то крайне проблематично учитывая английский.
                    0
                    Спасибо поручик!
                      +5
                      ИМХО, короткий синтаксис для функций:
                      1) в PHP в принципе не нужен
                      2) в текущем предложении выглядит просто ужасно
                      • НЛО прилетело и опубликовало эту надпись здесь
                          0
                          а если вот так?
                          $versionA = {($x) => $x + $y;
                          
                          • НЛО прилетело и опубликовало эту надпись здесь
                            0
                            или так?
                              +3
                              $versionA = :-)($x) => $x + $y;
                              
                              • НЛО прилетело и опубликовало эту надпись здесь
                                0

                                Да, прошлогодний вариант выглядел получше.

                                +2
                                Нашел тут видео-аудио по Зандстре, может в следующий выпуск можно будет включить. Кому лень читать, как мне, будет полезно
                                  0
                                  Видео-аудио — это хорошо, в качестве дополнения, но не заменит чтения материала (электронная или обычная книга).
                                    0
                                    Может еще как. У вас одностороннее мнение.
                                    Кому-то проще услышать, чем прочитать. Я например могу читать один абзац и не понимать его, а если мне его прочтут то сразу понимаю.
                                      0

                                      Плюсую, существуют даже соответсвующие психотипы: визуал, аудиал, кинестетик, дискрет. Хотя в случае прочтения текста, подозревал что это вполне себе альтернатива "аудиалам", т.к. у каждого есть некий "внутренний голос", который читает вам написанный текст.


                                      P.S. Ну, например, сейчас, читая, это, сообщение, ваш, внутренний, голос, неосознанно, запинается, на, каждом, слове. %)

                                        0
                                        Честно скажу, не запнулся, только когда прочитал подумал «о чем это он? аа вон запятые же»
                                  +2

                                  Про php-ref есть статья на хабре — Слабые ссылки в PHP 7. Сейчас уже он немного устаревшая, так как проводился рефакторинг и собственно были добавлены мягкие ссылки.

                                    +9

                                    P.S: если интересно — могу написать статью про изменения и обновления в расширении с примерами использования, хотя меня немного смущает на сколько это формат хабра.

                                    • НЛО прилетело и опубликовало эту надпись здесь
                                        +3
                                        Ну, если это не формат Хабра, то что же тогда формат? «Как кодить 72 часа в сутки и не умереть»?
                                      –1
                                      PHP уверенно идет по пути клиентских языков. Только зачем?
                                        0
                                        Почему Вы так решили?
                                        0

                                        По поводу immutable. Как было сказано в комментарии выше, это достигается объявлением приватных свойств, которые инициализируются только через конструктор и читаются через геттеры.


                                        Если с помощью immutable можно было бы запретить такое, и это было бы нормально по производительности, то смысл в immutable был бы на мой взгляд:


                                        class Person {
                                          public $id;
                                          public function __construct ($id) {
                                            $this->id = $id;
                                          }
                                        }
                                        
                                        immutable class Transaction {
                                          public $amount;
                                          public $fromPerson;
                                          public $toPerson;
                                        
                                          public function __construct ($amount, Person $from, Person $to) {
                                            $this->amount = $amount;
                                            $this->fromPerson = $from;
                                            $this->toPerson = $to;
                                          }
                                        }
                                        
                                        $person1 = new Person(1);
                                        $person2 = new Person(2);
                                        $transaction = new Transaction(100, $person1, $person2);
                                        $person1->id = 10; // Вот если бы тут выдавать Fatal Error...

                                        А если этого не запрещать, то остается ловушка, в которую не так уж и сложно попасть.

                                          0
                                          В целом по описанию сложилось ощущение, что immutable — это развитие вечного спора: «Getter/setter VS публичные свойства».
                                            0

                                            Кстати, на тему оптимизации простых getter/setter методов было обсуждение с участием Дмитрия Стогова — http://www.serverphorums.com/read.php?7,1443861, но по-моему бенчмарки показали не очень удовлетворительные р-ты.

                                              +1

                                              Это скорее попытка изобрести велосипед.


                                              immutable class A 
                                              {
                                                  public $b;
                                              }

                                              Каноничный вариант
                                              class A 
                                              {
                                                  public final $b;
                                              }
                                                –1

                                                С final можно определять только методы и классы. Ваш пример выдаст


                                                PHP Fatal error: Cannot declare property A::$b final, the final modifier is allowed only for methods and classes in php shell code on line 3
                                                  +2

                                                  А пример c immutable выдаст:


                                                  PHP Parse error: syntax error, unexpected 'class' (T_CLASS) in… on line 2

                                                  Спасибо, капитан! :D


                                                  Предлагаю чуток оглянуться вокруг и вспомнить, что мир не ограничен одним PHP: Что есть final для полей ;)

                                                +1

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

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

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