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
Fizz-Buzz в 52 символа?
https://code-golf.io/
На этом сайте можно посоревноваться в реализации самого короткого по числу символов решения простых задач. Например, попробуйте написать простейшую Fizz-Buzz задачку на PHP https://code-golf.io/fizz-buzz#php в 52 символа! А именно это и есть текущий рекорд.
https://code-golf.io/
На этом сайте можно посоревноваться в реализации самого короткого по числу символов решения простых задач. Например, попробуйте написать простейшую Fizz-Buzz задачку на PHP https://code-golf.io/fizz-buzz#php в 52 символа! А именно это и есть текущий рекорд.
PHP-Дайджест № 153
(25 марта – 8 апреля 2019)
https://habr.com/p/447130/
Принят PSR-14 Event Dispatcher, JIT в PHP 8, тройка RFC-предложений из PHP Internals, порция полезных инструментов, и многое другое!
(25 марта – 8 апреля 2019)
https://habr.com/p/447130/
Принят PSR-14 Event Dispatcher, JIT в PHP 8, тройка RFC-предложений из PHP Internals, порция полезных инструментов, и многое другое!
ORM для долгоживущих приложений
github.com/cycle/orm
Новая библиотека от автора RoadRunner Антона Титова. Аналог Doctrine для использования в демонизированных приложениях на PHP. Без утечек памяти и со сбрасываемым стейтом.
– Поддерживаются MySQL, MariaDB, PostgresSQL, SQLServer, SQLite;
– Совместима с Doctrine Collections и Zend Hydrator;
– Можно использовать в стиле ActiveRecord.
Сильная вещь, ждем документацию!
github.com/cycle/orm
Новая библиотека от автора RoadRunner Антона Титова. Аналог Doctrine для использования в демонизированных приложениях на PHP. Без утечек памяти и со сбрасываемым стейтом.
– Поддерживаются MySQL, MariaDB, PostgresSQL, SQLServer, SQLite;
– Совместима с Doctrine Collections и Zend Hydrator;
– Можно использовать в стиле ActiveRecord.
Сильная вещь, ждем документацию!
GitHub
GitHub - cycle/orm: PHP DataMapper, ORM
PHP DataMapper, ORM. Contribute to cycle/orm development by creating an account on GitHub.
Конец Zend Framework, начало Laminas project
https://getlaminas.org/
После длительного молчания наконец-то пролился свет на судьбу фреймворка.
Zend Framework переходит под крыло Linux Foundation https://www.linuxfoundation.org/blog/2019/04/lf-forms-laminas-project/ и меняет своё название на Laminas, чтобы отвязаться от коммерческого бренда Zend.
Фреймворк разрабатывался компанией Zend, затем вместе с самой компанией был поглощён Rogue Wave Software. В октябре прошлого года Зеев Сураски объявил о том, что вся команда Zend покинет RWS https://habr.com/ru/post/426809/. Пока о дальнейших планах рассказал только Enrico Zimuel, который перешёл в Elastic https://www.zimuel.it/blog/a_new_journey_with_PHP_again. Ждём новостей от Zeev Suraski, Adam Culp, Matthew Weier O'Phinney, и, конечно, Дмитрия Стогова.
Очень надеюсь это вдохнёт новую жизнь во фреймворк, и конкуренция с другими инструментами благоприятно воздействует на всю экосистему.
https://getlaminas.org/
После длительного молчания наконец-то пролился свет на судьбу фреймворка.
Zend Framework переходит под крыло Linux Foundation https://www.linuxfoundation.org/blog/2019/04/lf-forms-laminas-project/ и меняет своё название на Laminas, чтобы отвязаться от коммерческого бренда Zend.
Фреймворк разрабатывался компанией Zend, затем вместе с самой компанией был поглощён Rogue Wave Software. В октябре прошлого года Зеев Сураски объявил о том, что вся команда Zend покинет RWS https://habr.com/ru/post/426809/. Пока о дальнейших планах рассказал только Enrico Zimuel, который перешёл в Elastic https://www.zimuel.it/blog/a_new_journey_with_PHP_again. Ждём новостей от Zeev Suraski, Adam Culp, Matthew Weier O'Phinney, и, конечно, Дмитрия Стогова.
Очень надеюсь это вдохнёт новую жизнь во фреймворк, и конкуренция с другими инструментами благоприятно воздействует на всю экосистему.
Linux Foundation
Zend Framework transitions to Linux Foundation as new Laminas project
The Zend Framework is transitioning to the Linux Foundation and will launch later this year as a new project called Laminas.
Интервью с Никитой Поповым в подкасте SDCast
https://sdcast.ksdaemon.ru/2019/04/sdcast-103/
Всем известный Никита Попов, автор многочисленных улучшений для PHP, совсем не публичная фигура. Информации о нем мало, и даже выступления на конференциях можно пересчитать по пальцам.
И вот Константин Буркалев записал интереснейшее интервью, в котором Никита рассказывает о том, как попал в PHP, как реализует различные RFC и где черпает вдохновение, о трудностях PHP, статической типизации и многом-многом другом.
https://sdcast.ksdaemon.ru/2019/04/sdcast-103/
Всем известный Никита Попов, автор многочисленных улучшений для PHP, совсем не публичная фигура. Информации о нем мало, и даже выступления на конференциях можно пересчитать по пальцам.
И вот Константин Буркалев записал интереснейшее интервью, в котором Никита рассказывает о том, как попал в PHP, как реализует различные RFC и где черпает вдохновение, о трудностях PHP, статической типизации и многом-многом другом.
SDCast
SDCast #103: в гостях Никита Попов
Ходит шутка, что как устроен PHP полностью знают только Никита Попов и Дмитрий Стогов. Так вот Никита в этом выпуске у меня в гостях! Последние несколько лет Никита активно участвует в развитии языка PHP, является автором многих интересных RFC, часть из которых…
Короткие лямбды будут в PHP 7.4
https://wiki.php.net/rfc/arrow_functions_v2#vote
Предложение прошло голосование и принято. Теперь в PHP будут короткие анонимные функции с использованием синтаксиса
Итого в ближайшем обновлении PHP, которые выйдет в конце этого года, мы уже имеем FFI, предзагрузку, короткие лямбды, типизированные свойства, и целую пачку других улучшений https://wiki.php.net/rfc#php_74
https://wiki.php.net/rfc/arrow_functions_v2#vote
Предложение прошло голосование и принято. Теперь в PHP будут короткие анонимные функции с использованием синтаксиса
fn() =>
и автоматическим захватом переменных из внешнего скоупа по значению:$y = 1;
$fn = fn($x) => $x + $y;
Итого в ближайшем обновлении PHP, которые выйдет в конце этого года, мы уже имеем FFI, предзагрузку, короткие лямбды, типизированные свойства, и целую пачку других улучшений https://wiki.php.net/rfc#php_74