ch
Feedback
PHP Digest

PHP Digest

前往频道在 Telegram

PHP Дайджест Новости, материалы и инструменты из мира PHP — раз в месяц. Вопросы, замечания, предложения: @pronskiy

显示更多
8 309
订阅者
无数据24 小时
-117
+530
帖子存档
PHP-Дайджест № 164 (27 августа – 9 сентября 2019) https://habr.com/p/466671/ PHP 7.4.0 RC1, Laravel 6, Monolog 2 и другие рел
PHP-Дайджест № 164 (27 августа – 9 сентября 2019) https://habr.com/p/466671/ PHP 7.4.0 RC1, Laravel 6, Monolog 2 и другие релизы, Union Types, Object Initializer и прочие новости из PHP Internals, полезные инструменты, пачка подкастов и многое другое!

Union Types v2 https://github.com/nikic/php-rfcs/blob/union-types/rfcs/0000-union-types-v2.md Никита Попов разразился ещё одним монументальным RFC. Предлагается ввести объединённые типы – это значит, что переменная может принимать один из перечисленных типов. Де-факто объединённые типы давно используются в PHPDoc, но теперь они действительно будут проверяться самим интерпретатором. Предлагаемый синтаксис T1|T2|... может быть использованы везде, где типы можно указывать сейчас:
class Number {
    private int|float $number;

    public function setNumber(int|float $number): void {
        $this->number = $number;
    }

    public function getNumber(): int|float {
        return $this->number;
    }
}

______________________________________ Также примечательно, что этот RFC в качестве эксперимента оформлен как пул-реквест https://github.com/php/php-rfcs/pull/1 в репозиторий php/php-rfcs. Если такой подход приживётся, то в дальнейшем обсуждения RFC будут проходить на Гитхабе. Финальное голосование всё равно будет проходить на wiki.php.net.

В PHP 8 по умолчанию уровень ошибок будет установлен в E_ALL вместо текущего: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED. https://twitter.com/nikita_ppv/status/1168492040046415878 https://github.com/php/php-src/pull/4659/files

PHP-Дайджест № 163 (12 – 26 августа 2019) https://habr.com/p/464971/ PHP 7.4.0 beta 4, о судьбе P++, видео, подкасты, анонсы
PHP-Дайджест № 163 (12 – 26 августа 2019) https://habr.com/p/464971/ PHP 7.4.0 beta 4, о судьбе P++, видео, подкасты, анонсы митапов и конференций, порция полезных инструментов, и многое другое!

Сегодня в эфире сразу два подкаста Во-первых, это выпуск Пятиминутки PHP по следам PHP-Дайджеста, в котором я подробнее рассказываю о том, что происходило в PHP Internals за последнее время и о радикальном предложении переписать PHP без оглядки на обратную совместимость, под кодовым названием P++. https://soundcloud.com/5minphp/episode61 А во-вторых, это совместный выпуск SDCast + Пятиминутка PHP, где Костя Буркалев и Пётр Мязин общаются с разработчиками из команды PhpStorm Кириллом Смеловым и Максимом Колмаковым и обсуждают, как устроена разработка, команда, что есть нового! https://sdcast.ksdaemon.ru/2019/08/sdcast-107/

PHP-Дайджест № 162 (1 – 12 августа 2019) https://habr.com/p/463279/ О будущем PHP: P++ или PHP2020, принят PSR-12, PHP 7.4 be
PHP-Дайджест № 162 (1 – 12 августа 2019) https://habr.com/p/463279/ О будущем PHP: P++ или PHP2020, принят PSR-12, PHP 7.4 beta 2, Slim 4, и другие релизы, порция полезных инструментов, и многое другое!

Пробельные символы в именах функций PSR-1 определяет, что имена методов должны быть объявлены в camelCase. А вот что PSR-стандарты никак не регламентируют, это какие символы можно использовать в именах. Обычно для именования используются ASCII-символы, но и вот такой код будет вполне соответствовать PSR-1,2,12 (хотя PHP_CоdeSniffer его и не пропустит):
function имяФункции()
{
    echo 'Привет, мир!';
}
имяФункции();

А PHP позволяет использовать любые символы, хоть кириллицу, хоть emoji: https://github.com/Stichoza/phemoji
📅('Y-m-d', ⏰() + 🎰(1000, 2000)); 
// date('Y-m-d', time() + rand(1000, 2000));


Или можно пробельные символы:
function hello World()
{
    echo 'Hello world!';
}
hello World();

Или даже пробел нулевой длины: https://twitter.com/pgl/status/1155828747481825281
function ()
{
    echo 'Zero-width space function name 🤯';
}
();

Копировать отсюда: https://gist.github.com/pronskiy/47adea5952b7af1574c673403b054f28 На идее пробельного символа нулевой длины даже сделана мини-библиотека, которая имитирует синтаксис структуры Tuple из Python https://github.com/p810/tuple/
$tuple =  ('hello', 'world');
var_dump($tuple); // => p810\Tuple\Tuple#3 (2) {...}

Шутки шутками, а вот что касается обычных пробелов, то есть старая интересная идея использовать их в именовании тестовых методов: https://mnapoli.fr/using-non-breakable-spaces-in-test-method-names/
public function test a user can add a product to a wishlist()
{
    // ...
}

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

Обычно в подкасте выходит сокращённая версия дайджеста с основными моментами. На этот раз она скорее расширенная: подробнее рассмотрены RFC, а также Symfony Cloud и Laravel Vapor. https://soundcloud.com/5minphp/episode58

PHP-Дайджест № 161 (15 – 29 июля 2019) https://habr.com/p/461669/ PHP 7.4.0 beta 1, PhpStorm 2019.2, PSR-12, обзор RFC предло
PHP-Дайджест № 161 (15 – 29 июля 2019) https://habr.com/p/461669/ PHP 7.4.0 beta 1, PhpStorm 2019.2, PSR-12, обзор RFC предложений из PHP Internals, новости с Laracon US, подкасты, порция полезных инструментов, и многое другое.

Вышел PhpStorm 2019.2 https://habr.com/ru/company/JetBrains/blog/461449/ Вчера зарелизили второй мажорный выпуск PhpStorm в этом году. Возможно, вы уже успели обновиться и посмотреть обзор новых фич. Но если вдруг нет, то всё самое важное можно глянуть в коротком видеоролике (англ): https://www.youtube.com/watch?v=oA7Xmc_FwK0 А подробный разбор всех новых возможностей смотрите в хабрапосте. Из наиболее заметного: • Поддержка типизированных свойств PHP 7.4, включая быстрые фиксы для миграции • Поиск дублирующегося кода на лету • Подсветка и проверка регулярок в PHP • EditorConfig работает из коробки и в нём можно указывать PhpStorm-опции • Поддержка Shell-скриптов с инспекциями, быстрыми фиксами, встроенной документацией • Подсветка синтаксиса для 20+ языков

Vapor – serverless для Laravel https://vapor.laravel.com/ Каждый год на Laracon US Тейлор представляет какой-то новый продукт
Vapor – serverless для Laravel https://vapor.laravel.com/ Каждый год на Laracon US Тейлор представляет какой-то новый продукт в экосистеме Laravel. На этот раз им стал Vapor – платный сервис для быстрого поднятия serverless PHP-приложений на инфраструктуре AWS Lambda. https://mattstauffer.com/blog/introducing-laravel-vapor/ – отличный конспект доклада с основными моментами. https://www.pscp.tv/freekmurze/1nAKEzLPpNgGL?t=15m16s – трансляция в перископе, профессиональную запись обещают в течение суток.

Мёртвый код https://blog.krakjoe.ninja/2019/07/trimming-phat.html В PhpStorm и других инструментах есть инспекция для поиска "мёртвого кода" то есть, не просто недостижимого типа:
function foo() {
  return;
  echo "I'm dead";
};

а такого, который на вид вполне норм, но при этом нигде не вызывается. Проблема в том, что такие инструменты вычисляют неиспользуемые куски статически, и из-за динамической природы PHP все возможные варианты просчитать довольно сложно. С другой стороны, если вся функциональность вашего приложения покрыта тестами, то теоретически найти "мёртвые" участки можно из покрытия. Но на практике так бывает редко никогда. Joe Watkins, core-контрибьютор PHP, а также автор pthreads, parallel, и pcov, разрабатывает новое расширение https://github.com/krakjoe/tombs, идея которого простая: подключаете его на продакшене, ждёте день/неделю/месяц, а потом смотрите статистику и видите, какие функции/методы ни разу не выполнялись — с большой вероятностью и в следующий год они не будут запущены, а значит можно их удалять не жалея.

Возобновляем традицию записывать короткую аудиверсию дайджеста в подкасте Пятиминутка PHP. Спасибо Петру Мязину! https://soundcloud.com/5minphp/episode56

PHP-Дайджест № 160 (1 – 15 июля 2019) https://habr.com/p/460022/ PHP 7.4.0 alpha 3, ReactPHP 1.0 LTS, порция полезных инструм
PHP-Дайджест № 160 (1 – 15 июля 2019) https://habr.com/p/460022/ PHP 7.4.0 alpha 3, ReactPHP 1.0 LTS, порция полезных инструментов, видеозаписи с конференций, подкасты и многое другое!

В PHP 7 нет тайпхинтов Начиная с PHP 7, то что мы называем тайпхинтами (type hints) в действительности называется объявлениям
В PHP 7 нет тайпхинтов Начиная с PHP 7, то что мы называем тайпхинтами (type hints) в действительности называется объявлениями типов (type declarations). https://twitter.com/localheinz/status/1144902570294595584

Полезное обновление proc_open() в PHP 7.4 https://twitter.com/nikita_ppv/status/1145684078114549760 В PHP 7.4 можно будет запускать внешние программы без необходимости проходить через шелл:
proc_open(['php', '-r', 'echo "Hello World\n";'], $descriptors, $pipes);

То есть вместо строки можно будет передавать массив аргументов. Это значит, что не надо думать об экранировании. На Linux аргументы передаются сразу в execvp. А на Windows формируется специальная экранированная строка по правилам, описанным в https://docs.microsoft.com/en-us/cpp/cpp/parsing-cpp-command-line-arguments. В качестве бонуса теперь сигналы будут передаваться напрямую открытому процессу, а не шеллу.

PHP-Дайджест № 159 (17 июня – 1 июля 2019) https://habr.com/ru/post/458292/ PHP 7.4.0 alpha 2, BeerPHP, обзор свежих RFC из P
PHP-Дайджест № 159 (17 июня – 1 июля 2019) https://habr.com/ru/post/458292/ PHP 7.4.0 alpha 2, BeerPHP, обзор свежих RFC из PHP Internals, включая Strict operators directive, порция полезных инструментов, видео и многое другое!

Пробелы или табы? Для отступов есть кое-что поинтересней!
Пробелы или табы? Для отступов есть кое-что поинтересней!

PHP-Дайджест № 158 (3 – 17 июня 2019) https://habr.com/p/456332/ PHP 7.4.0 alpha 1, DevConfX, по паре принятых и новых RFC из
PHP-Дайджест № 158 (3 – 17 июня 2019) https://habr.com/p/456332/ PHP 7.4.0 alpha 1, DevConfX, по паре принятых и новых RFC из PHP Internals, порция полезных инструментов, и многое другое!

Дженерики в PHP https://www.daveliddament.co.uk/articles/php-generics-today-almost/ По ссылке годная статья о том, что такое дженерики и почему они нужны в PHP. А также обзор существующих реализаций в Psalm/Phan. На конференции PHPCE 2018 Расмус сказал https://youtu.be/SvEGwtgLtjA?t=2878, что основной проблемой для реализации является производительность. Потому что проверки типов в рантайме могут обойтись довольно дорого. Вспомним, что типизированные свойства вылились приблизительно в 1% падения производительности. На PHP Russia Никита Попов также подтвердил https://youtu.be/teKnckg5x7I?t=1105, что реализовать будет не просто, но он хотел бы видеть эту фичу в PHP. Вдогонку ещё пара статей на эту тему: https://www.phparch.com/2018/11/the-case-for-generics-in-php/ https://stitcher.io/blog/php-generics-and-why-we-need-them