Предлагаем вашему вниманию очередную подборку со ссылками на новости и материалы. Приятного чтения!
Новости и релизы
- 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.
Программа уже сформирована. Среди заявленных докладчиков:
- Marco “Ocramius” Pivetta, core разработчик Doctrine и Zend Framework, выступит сразу с двумя докладами: Doctrine Best Practices и Extremely Defensive PHP;
- Andres Gutierrez, создатель фреймворка Phalcon, будет с докладом Phalcon 3.0, Zephir & PHP7;
- Olivier Dolbeau и Benjamin De Bernardi, разработчики из BlaBlaCar, расскажут как работает и масштабируется сервис на Symfony 2 с 25+ миллионами пользователей в 22 странах. Кстати, на Symfony Business Awards сайт BlaBlaCar стал лучшим в 2015 году;
- и много других.
Специально для читателей 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 — Блоговая платформа с инлайн редактированием.
Материалы для обучения
Yii
- luyadev/luya — CMS на Yii2.
- Yii, fxp и Asset packagist
- Простая система демонов для Yii2
- Вариант работы с кешем без доступа к бэкенду на примере Yii2
Laravel
- laravel/scout — Полнотекстовый поиск для Laravel. Туториал по использованию.
- Разработка на Laravel с помощью Docker
- Заглушки связей в Eloquent для ускорения тестов
- Отправка и получение SMS с помощью Laravel и Nexmo
- Тейлор Отвел разместил вакансию в поисках сотрудника для работы над Laravel и инфраструктурой
- Книга Using Zend Framework 3 — Бесплатная open-source книга о новой версии Zend Framework для начинающих с примерами. Приветствуется помощь по переводу на русский.
- События в Zend Expressive приложении
- Пишем «Hello World» расширение для PHP 7
- Туториал по CouchDB с примерами использования на PHP
- Изменения в CleverStyle Framework 5
- Маршрутизация в CleverStyle Framework
- Контрабанда «Гамлета» при помощи кота — Стеганография на PHP.
- Управляем компьютером через браузер
Аудио и видеоматериалы
- PHP Roundtable 050: PHP For Beginners — Советы для начинающих изучение PHP.
- PHP Roundtable 049: Event Sourcing in PHP
- Laracon US 2016 — Видеозаписи всех докладов.
Спасибо за внимание!
Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку.
Вопросы и предложения пишите на почту или в твиттер.
Присылайте ссылки на интересные статьи или полезные инструменты, которых не было в PHP-Дайджестах, и ваше имя будет рядом с присланной ссылкой в выпуске.
» Прислать ссылку
» Быстрый поиск по всем дайджестам
< Предыдущий выпуск: PHP-Дайджест № 89
Комментарии (39)
FractalizeR
15.08.2016 00:49+1$email->email = "bar@php.net" // Вызов повлечет Fatal Error
Мне кажется, для immutable классов такой вызов можно отследить еще на этапе парсинга скрипта до реального исполнения. Это ведь присваивание свойству класса, который объявлен неизменяемым.
SerafimArts
15.08.2016 02:19+1class MyClass1 { public $email; } immutable class MyClass2 { public $email; } $class = new ('MyClass' . random_int(1, 2)); $class->email = 'some@any.com';
Ну и как отследить?
den_rad
15.08.2016 07:55Я не очень понимаю, что мешает сейчас сделать private свойство и для нее магический метод __get?
kzooz
15.08.2016 11:25Мне кажется php слишком динамический для статичексокго анализа :)
class A { public $property; } $str = 'property'; (new A)->{$str} = 123;
FractalizeR
15.08.2016 14:28+1Я думаю, в любом языке есть ситуации, которые трудно проанализировать статически. Но если число статических вызовов у вас в коде достаточно велико, пользу из статического анализа все же можно извлечь.
Alexufo
15.08.2016 01:34Ссылки на видео о php конечно хорошо, но то что там все кроме одного говорят в микрофон вебкамеры, разобрать что-то крайне проблематично учитывая английский.
vlreshet
15.08.2016 09:51+5ИМХО, короткий синтаксис для функций:
1) в PHP в принципе не нужен
2) в текущем предложении выглядит просто ужасно
serg_deep
15.08.2016 10:18+11$versionA = ^($x) => $x + $y;
Более ужасный синтаксис сложно себе представить.
gangstarcj
15.08.2016 10:18+2Нашел тут видео-аудио по Зандстре, может в следующий выпуск можно будет включить. Кому лень читать, как мне, будет полезно
RFL
17.08.2016 14:01Видео-аудио — это хорошо, в качестве дополнения, но не заменит чтения материала (электронная или обычная книга).
gangstarcj
17.08.2016 16:14Может еще как. У вас одностороннее мнение.
Кому-то проще услышать, чем прочитать. Я например могу читать один абзац и не понимать его, а если мне его прочтут то сразу понимаю.SerafimArts
17.08.2016 16:27Плюсую, существуют даже соответсвующие психотипы: визуал, аудиал, кинестетик, дискрет. Хотя в случае прочтения текста, подозревал что это вполне себе альтернатива "аудиалам", т.к. у каждого есть некий "внутренний голос", который читает вам написанный текст.
P.S. Ну, например, сейчас, читая, это, сообщение, ваш, внутренний, голос, неосознанно, запинается, на, каждом, слове. %)
gangstarcj
17.08.2016 20:13Честно скажу, не запнулся, только когда прочитал подумал «о чем это он? аа вон запятые же»
zaq178miami
15.08.2016 10:22+2Про php-ref есть статья на хабре — Слабые ссылки в PHP 7. Сейчас уже он немного устаревшая, так как проводился рефакторинг и собственно были добавлены мягкие ссылки.
zaq178miami
15.08.2016 10:30+9P.S: если интересно — могу написать статью про изменения и обновления в расширении с примерами использования, хотя меня немного смущает на сколько это формат хабра.
serg_deep
15.08.2016 11:41Плюсануть не могу( Но скажу честно, на хабре очень мало материалов имеено о внутренностях PHP и модулях. Только mail.ru пишут интересные посты на эту тему. Буду Вам крайне признателен.
vshemarov
15.08.2016 12:30+3Ну, если это не формат Хабра, то что же тогда формат? «Как кодить 72 часа в сутки и не умереть»?
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...
А если этого не запрещать, то остается ловушка, в которую не так уж и сложно попасть.
nitso
16.08.2016 12:32В целом по описанию сложилось ощущение, что immutable — это развитие вечного спора: «Getter/setter VS публичные свойства».
zaq178miami
17.08.2016 11:02Кстати, на тему оптимизации простых getter/setter методов было обсуждение с участием Дмитрия Стогова — http://www.serverphorums.com/read.php?7,1443861, но по-моему бенчмарки показали не очень удовлетворительные р-ты.
SerafimArts
17.08.2016 11:40+1Это скорее попытка изобрести велосипед.
immutable class A { public $b; }
Каноничный вариантclass A { public final $b; }
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
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 для полей ;)
Fesor
18.08.2016 12:38+1Мне нужны имутабельные структуры данных, и я не хочу для этого писать кучу кода из тупых геттеров сгенерированных IDE.
gogolinsky
Спасибо, Роман!
pronskiy
Всегда пожалуйста!