PHP-Дайджест № 148
https://habr.com/ru/post/437752/
Взломан репозиторий PEAR, о будущем Xdebug, конференция PHP Russia 2019, свежие релизы, RFC предложения из PHP Internals, порция полезных инструментов, и многое другое!
https://habr.com/ru/post/437752/
Взломан репозиторий PEAR, о будущем Xdebug, конференция PHP Russia 2019, свежие релизы, RFC предложения из PHP Internals, порция полезных инструментов, и многое другое!
Habr
PHP-Дайджест № 148 (14 – 28 января 2019)
Свежая подборка со ссылками на новости и материалы. В выпуске: взломан репозиторий PEAR, о будущем Xdebug, конференция PHP Russia 2019, свежие релизы, RFC предложения из PHP Internals, порция...
JIT в PHP!
https://wiki.php.net/rfc/jit
Попытки реализовать JIT были предприняты еще во времена PHP 6. И вот наконец-то усилиями Дмитрия Стогова эта возможность стала реальностью! Причем предлагается включить ее уже в PHP 7.4, но отключенной по умолчанию. Это отличная идея, так как даст возможность пощупать на реальных приложениях раньше. PHP JIT реализован как независимая часть OPcache, и может быть включен/выключен даже в рантайме.
https://wiki.php.net/rfc/jit
Попытки реализовать JIT были предприняты еще во времена PHP 6. И вот наконец-то усилиями Дмитрия Стогова эта возможность стала реальностью! Причем предлагается включить ее уже в PHP 7.4, но отключенной по умолчанию. Это отличная идея, так как даст возможность пощупать на реальных приложениях раньше. PHP JIT реализован как независимая часть OPcache, и может быть включен/выключен даже в рантайме.
PHP-Дайджест № 149
(28 января – 11 февраля 2019)
PHPUnit 8 и другие релизы, PSR-14 и PSR-12 в стадии ревью, JIT для PHP, стартовала работа над PHP 8, пачка свежих RFC из PHP Internals, порция полезных инструментов, и многое другое!
https://habr.com/post/439780/
(28 января – 11 февраля 2019)
PHPUnit 8 и другие релизы, PSR-14 и PSR-12 в стадии ревью, JIT для PHP, стартовала работа над PHP 8, пачка свежих RFC из PHP Internals, порция полезных инструментов, и многое другое!
https://habr.com/post/439780/
И по хорошей традиции аудиоверсия дайджеста в подкасте Пятиминутка PHP, за который спасибо Петру Мязину!
https://5minphp.ru/episode47/
https://5minphp.ru/episode47/
Пятиминутка PHP
Выпуск №47 — PHP-Дайджест № 149 (28 января – 11 февраля 2019)
В этом выпуске автор знаменитых PHP-Дайджестов Роман Пронский делится новостями из мира PHP за последние две недели: PSR-14 и PSR-12 в стадии ревью, JIT для PHP, стартовала работа над PHP 8, пачка …
self и parent в качестве тайпхинтов
Еще одна старая фишка PHP, о которой вы могли не знать. В качестве typehint можно использовать как self так и parent.
https://madewithlove.be/self-and-parent-type-hints/
Еще одна старая фишка PHP, о которой вы могли не знать. В качестве typehint можно использовать как self так и parent.
https://madewithlove.be/self-and-parent-type-hints/
https://githistory.xyz/
Забавный инструмент для просмотра истории любого файла на GitHub.
Открываем файл, заменяем домен в строке браузера на github.githistory.xyz и дальше, листая стрелками влево/вправо, можно смотреть как менялся файл.
Забавный инструмент для просмотра истории любого файла на GitHub.
Открываем файл, заменяем домен в строке браузера на github.githistory.xyz и дальше, листая стрелками влево/вправо, можно смотреть как менялся файл.
Хотите узнать, почему некоторые RFC так и остаются непринятыми и без реализации в PHP?
Например, дженерики, короткие лямбды, перегрузка методов, аннотации и т.д.
По ссылке отличный обзор этих и других предложений с объяснением трудностей и прогнозом дальнейшей судьбы.
https://github.com/danack/RfcCodex
Например, дженерики, короткие лямбды, перегрузка методов, аннотации и т.д.
По ссылке отличный обзор этих и других предложений с объяснением трудностей и прогнозом дальнейшей судьбы.
https://github.com/danack/RfcCodex
GitHub
GitHub - Danack/RfcCodex: Notes on PHP RFCs, and topics that occur repeatedly on PHP internals
Notes on PHP RFCs, and topics that occur repeatedly on PHP internals - GitHub - Danack/RfcCodex: Notes on PHP RFCs, and topics that occur repeatedly on PHP internals
В последнее время PHP становится лучше с каждым принятым RFC, ну а PHP 7.4 и 8 так вообще выглядят весьма многообещающе. Хотите узнать, как все начиналось в 1995?
Тогда вот Docker-образ с PHP 1 https://github.com/jaem3l/php1-docker-image
Тогда вот Docker-образ с PHP 1 https://github.com/jaem3l/php1-docker-image
В PhpStorm 2019.1 EAP есть одна интересная экспериментальная фича. С помощью файла .phpstorm.meta.php можно подсказывать IDE, какие аргументы ожидаются в функции или какие значения она может возвращать.
Например, функция ожидает в качестве аргумента какую-то константу. Формально тип этой константы, допустим
В PhpStorm 2019.1 EAP автодополнение для этих случаев уже работает. Но более того, такое автодополнение можно сделать у себя в любом проекте/библиотеке/фреймворке просто добавив специальный файл .phpstorm.meta.php в репозиторий. И таких файлов может быть сколько угодно, PhpStorm сам найдет и смержит их.
https://blog.jetbrains.com/phpstorm/2019/02/new-phpstorm-meta-php-features/
Например, функция ожидает в качестве аргумента какую-то константу. Формально тип этой константы, допустим
integer
, но в действительности набор возможных констант нам известен. Например, json_encode($data, /* вот тут битовая маска из констант JSON_* */)
Но еще у нас может быть функция, которая возвращает константу, как например json_last_error()
. В PhpStorm 2019.1 EAP автодополнение для этих случаев уже работает. Но более того, такое автодополнение можно сделать у себя в любом проекте/библиотеке/фреймворке просто добавив специальный файл .phpstorm.meta.php в репозиторий. И таких файлов может быть сколько угодно, PhpStorm сам найдет и смержит их.
https://blog.jetbrains.com/phpstorm/2019/02/new-phpstorm-meta-php-features/
PHP-Дайджест № 150
(11 – 25 февраля 2019)
Изменены правила голосования за RFC в PHP Internals, стартовал прием заявок на доклады для PHP Russia 2019, новое расширение для реализации параллельного исполнения кода, свежие материалы для обучения, видео, порция полезных инструментов, и многое другое!
https://habr.com/ru/post/441584/
(11 – 25 февраля 2019)
Изменены правила голосования за RFC в PHP Internals, стартовал прием заявок на доклады для PHP Russia 2019, новое расширение для реализации параллельного исполнения кода, свежие материалы для обучения, видео, порция полезных инструментов, и многое другое!
https://habr.com/ru/post/441584/
Читать разборы ошибок безопасности всегда очень интересно, потому что выглядят они как настоящий детектив! Вот один из таких разборов, где в конечном счете все свелось к досадной опечатке.
Это еще раз показывает насколько важны тайп хинты, статический анализ, и нормальный редактор ;-)
https://medium.com/@DanielC7/remote-code-execution-gaining-domain-admin-privileges-due-to-a-typo-dbf8773df767
Это еще раз показывает насколько важны тайп хинты, статический анализ, и нормальный редактор ;-)
https://medium.com/@DanielC7/remote-code-execution-gaining-domain-admin-privileges-due-to-a-typo-dbf8773df767
Medium
Remote Code Execution — Gaining Domain Admin due to a typo
CVE-2018–9022
PHP-Дайджест № 151
(25 февраля – 11 марта 2019)
Обновления PHP, Laravel 5.8, Xdebug 2.7 и другие релизы, 3 свежих RFC, 2 принятых, и концепт из PHP Internals, порция полезных инструментов, и многое другое!
https://habr.com/ru/post/443220/
(25 февраля – 11 марта 2019)
Обновления PHP, Laravel 5.8, Xdebug 2.7 и другие релизы, 3 свежих RFC, 2 принятых, и концепт из PHP Internals, порция полезных инструментов, и многое другое!
https://habr.com/ru/post/443220/
Короткие лямбды 2.0
https://wiki.php.net/rfc/arrow_functions_v2
Никита Попов продолжает бить по проблемным местам PHP! В своем свежем RFC он замахнулся на стрелочные функции, они же короткие лямбды. У этой идеи в PHP сложная история, было как минимум две попытки (1, 2) их реализовать и обе провалились. В основном упираясь в синтаксис.
Уже рассматривались варианты:
Предложен следующий вариант:
А если надо по ссылке, то придется либо явно перечислять переменные по ссылке, либо использовать переключатель:
https://wiki.php.net/rfc/arrow_functions_v2
Никита Попов продолжает бить по проблемным местам PHP! В своем свежем RFC он замахнулся на стрелочные функции, они же короткие лямбды. У этой идеи в PHP сложная история, было как минимум две попытки (1, 2) их реализовать и обе провалились. В основном упираясь в синтаксис.
Уже рассматривались варианты:
$x ~> $x * 2Собственно половина документа, который опубликовал Никита, посвящена выбору синтаксиса.
function($x) => $x + $y
^($x) => $x + $y
Предложен следующий вариант:
fn($x, $y) => $x * $yПри этом переменные из внешнего скоупа биндятся по значению автоматически и не надо использовать use(), то есть можно вот так:
$y = 1;
$fn1 = fn($x) => $x + $y;
А если надо по ссылке, то придется либо явно перечислять переменные по ссылке, либо использовать переключатель:
$fn = fn() use(&) {Также можно будет объявлять и методы в виде короткого синтаксиса:
// ...
}
class Test {Надеюсь, на этот раз предложение преодолеет порог голосования и будет принято.
private $foo;
fn getFoo() => $this->foo;
}
PHP-Дайджест № 152
(11 – 25 марта 2019)
Свежие RFC предложения и другие новости из PHP Internals, порция полезных инструментов, и много других материалов и новостей!
https://habr.com/ru/post/445140/
(11 – 25 марта 2019)
Свежие RFC предложения и другие новости из PHP Internals, порция полезных инструментов, и много других материалов и новостей!
https://habr.com/ru/post/445140/
Принят PSR-14 Event Dispatcher
https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-14-event-dispatcher.md
Новый стандарт регламентирует работу с событиями в приложении. И это тот самый стандарт, из-за которого разгорелись споры и Fabien Potencier покинул PHP-FIG. Правда, после этого стандарт был заметно доработан.
В итоге получился довольно простой, понятный, и не очень строгий стандарт. Он определяет всего 3 интерфейса:
Также стандарт перечисляет характеристики, которым должны соответствовать все элементы и рекомендации по реализации.
Уже есть пара реализаций:
https://github.com/crell/tukio
https://github.com/phly/phly-event-dispatcher
И интересная идея плагина для Composer:
https://github.com/bmack/kart-composer-plugin
https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-14-event-dispatcher.md
Новый стандарт регламентирует работу с событиями в приложении. И это тот самый стандарт, из-за которого разгорелись споры и Fabien Potencier покинул PHP-FIG. Правда, после этого стандарт был заметно доработан.
В итоге получился довольно простой, понятный, и не очень строгий стандарт. Он определяет всего 3 интерфейса:
EventDispatcherInterface
с единственным методом dispatch(object $event)
, при этом событие – любой объект, разве что если вы хотите, чтоб событие останавливало обработку других событий, тогда оно должно реализовать StoppableEventInterface
; ну и третий интерфейс – это ListenerProviderInterface
реализация которого должна уметь предоставлять список обработчиков для конкретного события через метод getListenersForEvent(object $event) : iterable
. Ну а обработчиком может быть совершенно любой Сallable
.Также стандарт перечисляет характеристики, которым должны соответствовать все элементы и рекомендации по реализации.
Уже есть пара реализаций:
https://github.com/crell/tukio
https://github.com/phly/phly-event-dispatcher
И интересная идея плагина для Composer:
https://github.com/bmack/kart-composer-plugin
GitHub
fig-standards/PSR-14-event-dispatcher.md at master · php-fig/fig-standards
Standards either proposed or approved by the Framework Interop Group - fig-standards/PSR-14-event-dispatcher.md at master · php-fig/fig-standards
Деструктурирующее присваивание с нечисловыми ключами
Эта возможность доступна с PHP 7.1 и очень удобна, когда надо выбрать только некоторые элементы из массива.
https://twitter.com/brendt_gd/status/1111243431781822464
Эта возможность доступна с PHP 7.1 и очень удобна, когда надо выбрать только некоторые элементы из массива.
https://twitter.com/brendt_gd/status/1111243431781822464