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

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


  • 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
Поделиться с друзьями
-->

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


  1. gogolinsky
    14.08.2016 23:23
    +3

    Спасибо, Роман!


    1. pronskiy
      14.08.2016 23:24
      +2

      Всегда пожалуйста!


  1. rhamdeew
    15.08.2016 00:46
    +1

    Спасибо за очередной дайджест!


  1. FractalizeR
    15.08.2016 00:49
    +1

    $email->email = "bar@php.net" // Вызов повлечет Fatal Error

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


    1. SerafimArts
      15.08.2016 02:19
      +1

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

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


      1. FractalizeR
        15.08.2016 14:27

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


    1. den_rad
      15.08.2016 07:55

      Я не очень понимаю, что мешает сейчас сделать private свойство и для нее магический метод __get?


      1. Blumfontein
        15.08.2016 08:09
        +4

        Ну тогда уж лучше просто геттер без сеттера


      1. Miraage
        15.08.2016 11:07

        Производительность.


    1. kzooz
      15.08.2016 11:25

      Мне кажется php слишком динамический для статичексокго анализа :)

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


      1. FractalizeR
        15.08.2016 14:28
        +1

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


  1. Alexufo
    15.08.2016 01:34

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


  1. babylon
    15.08.2016 01:45

    Спасибо поручик!


  1. vlreshet
    15.08.2016 09:51
    +5

    ИМХО, короткий синтаксис для функций:
    1) в PHP в принципе не нужен
    2) в текущем предложении выглядит просто ужасно


  1. serg_deep
    15.08.2016 10:18
    +11

    $versionA = ^($x) => $x + $y;

    Более ужасный синтаксис сложно себе представить.


    1. pavlik
      16.08.2016 15:14

      а если вот так?

      $versionA = {($x) => $x + $y;
      


      1. serg_deep
        17.08.2016 02:58

        Ну лучше уж так.


        $versionA = {($x) => $x + $y};

        Но явно не это убожество.


    1. pavlik
      16.08.2016 15:14

      или так?


    1. pavlik
      16.08.2016 15:25
      +3

      $versionA = :-)($x) => $x + $y;
      


      1. serg_deep
        17.08.2016 03:00

        Я думаю после такого, я как человек который 7 лет пишет на PHP, то же скажу что PHP га… но :-)


    1. mnv
      16.08.2016 15:52

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


  1. gangstarcj
    15.08.2016 10:18
    +2

    Нашел тут видео-аудио по Зандстре, может в следующий выпуск можно будет включить. Кому лень читать, как мне, будет полезно


    1. RFL
      17.08.2016 14:01

      Видео-аудио — это хорошо, в качестве дополнения, но не заменит чтения материала (электронная или обычная книга).


      1. gangstarcj
        17.08.2016 16:14

        Может еще как. У вас одностороннее мнение.
        Кому-то проще услышать, чем прочитать. Я например могу читать один абзац и не понимать его, а если мне его прочтут то сразу понимаю.


        1. SerafimArts
          17.08.2016 16:27

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


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


          1. gangstarcj
            17.08.2016 20:13

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


  1. zaq178miami
    15.08.2016 10:22
    +2

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


    1. zaq178miami
      15.08.2016 10:30
      +9

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


      1. serg_deep
        15.08.2016 11:41

        Плюсануть не могу( Но скажу честно, на хабре очень мало материалов имеено о внутренностях PHP и модулях. Только mail.ru пишут интересные посты на эту тему. Буду Вам крайне признателен.


      1. vshemarov
        15.08.2016 12:30
        +3

        Ну, если это не формат Хабра, то что же тогда формат? «Как кодить 72 часа в сутки и не умереть»?


  1. babylon
    15.08.2016 15:03
    -1

    PHP уверенно идет по пути клиентских языков. Только зачем?


    1. 0xScript
      16.08.2016 11:34

      Почему Вы так решили?


  1. mnv
    16.08.2016 11:58

    По поводу 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...

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


    1. nitso
      16.08.2016 12:32

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


      1. zaq178miami
        17.08.2016 11:02

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


      1. SerafimArts
        17.08.2016 11:40
        +1

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


        immutable class A 
        {
            public $b;
        }

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


        1. mnv
          17.08.2016 18:13
          -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


          1. SerafimArts
            17.08.2016 20:03
            +2

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


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

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


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


      1. Fesor
        18.08.2016 12:38
        +1

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