- PVSM.RU - https://www.pvsm.ru -
Фото James Titcumb [1]
Свежая подборка со ссылками на новости и материалы. В выпуске все про PHP 8: первая альфа, новое выражение match
, баг в синтаксисе @@
для атрибутов, реальные бенчмарки JIT, 4 новых предложения. И, как всегда, инструменты, статьи, видео и подкасты.
Приятного чтения!
Полные обзоры что нового в PHP 8 тут [10] и тут [11].
Пощупать можно на 3v4l.org [12] или используя уже готовые Docker-образы [13].
CurlHandle
.Derick Rethans показал [16], что JIT дает хороший прирост на коде, который поддается оптимизации, но все равно это не сравнимо с чистой реализацией на C. Brent Roose попробовал [17] на веб-приложениях и ожидаемо прирост в них минимальный.
Benjamin Eberlei подготовил инструкцию о том, как вообще тестировать с JIT [18] и на что обращать внимание.
@@
.
Позже выяснилось, что этот синтаксис может трактоваться неоднозначно, а в реализации использовался хак, чтобы обойти проблему и об этом не было упомянуто в предложении.
Двусмысленность вот такая: function(@@X Y $z)
может быть интерпретирован как function(@@XY $z)
(атрибут XY
и без типа) или function(@@X Y $z)
(атрибут X
и Y
тип параметра). Потому что PHP допускает пробелы вокруг разделителя неймспесов.
К счастью для поклонников синтаксиса @@
, Никита нашел способ [22] решить проблему, если будет принято предложение [RFC] Treat namespaced names as single token [23].
match
, которое работает по смыслу как switch
, но при этом имеет проверку на тип и возможность возвращать значение.
// Вот так работает switch:
switch ('foo') {
case 0:
$result = "Oh no!n";
break;
case 'foo':
$result = "This is what I expectedn";
break;
}
echo $result;
//> Oh no!
// То же самое на match:
echo match ('foo') {
0 => "Oh no!n",
'foo' => "This is what I expectedn",
};
//> This is what I expected
use
у замыканий по аналогии с тем, как уже сделано для аргументов и параметров функций.
$longArgs_longVars = function (
$longArgument,
$longerArgument,
$muchLongerArgument, // Здесь запятая в PHP 8.0 уже разрешена
) use (
$longVar1,
$longerVar2,
$muchLongerVar3 // А вот здесь предлагается добавить
) {
// body
};
// Syntax Option A
class User {
public:private int $id;
public:protected string $name;
public function __construct(int $id, string $name) {
$this->id = $id;
$this->name = $name;
}
}
// Syntax Option B
class User {
public private(set) int $id;
public protected(set) string $name;
public function __construct(int $id, string $name) {
$this->id = $id;
$this->name = $name;
}
}
Судя по треду [27], что-то подобное будет, но уже в PHP 8.1, потому что требуется больше времени для обсуждения нюансов и пересечений с другими RFC, например, полноценными аксессорами [28], ридонли свойствами [29], иммутабельными классами [30].
declare
и __halt_compiler
— это не функции, а языковые конструкции, по типу как echo
, то предлагается разрешить вызывать их без скобок.
declare(strict_types=1);
// =>
declare strict_types = 1;
Во-первых, избавиться от концепции «строки, начинающейся с цифр». Например в таком случае echo '2str' + 2;
результат будет не 4, а 2 и вместо E_NOTICE “A non well formed numeric value encountered”
будет брошен E_WARNING “A non-numeric value encountered”
.
И во-вторых, разрешить пробельные символы в конце числовых строк, то есть чтоб "123 " == " 123"
было true
и все прочие операции работали, как и для строк с начальными пробелами.
memory_get_usage()
ничего не показывает.Спасибо за внимание!
Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку [79].
Вопросы и предложения пишите на почту [80] или в твиттер [81].
Больше новостей и комментариев в Telegram-канале PHP Digest [82].
Прислать ссылку [83]
Поиск ссылок по всем дайджестам [84]
← Предыдущий выпуск: PHP-Дайджест № 182 [85]
Автор: Роман Пронский
Источник [86]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/php-2/354698
Ссылки в тексте:
[1] James Titcumb: https://twitter.com/asgrim
[2] PHP 8.0 alpha 1: https://www.php.net/archive/2020.php#2020-06-25-1
[3] полугодовой цикл: https://wiki.php.net/todo/php80
[4] новые возможности: https://wiki.php.net/rfc#php_80
[5] объединенные типы: https://php.watch/versions/8.0#union-types
[6] JIT: https://habr.com/ru/company/otus/blog/509598/
[7] атрибуты: https://php.watch/articles/php-attributes
[8] объявление свойств в конструкторе: https://php.watch/versions/8.0/constructor-property-promotion
[9] mixed: https://php.watch/versions/8.0#mixed-type
[10] тут: https://php.watch/versions/8.0
[11] тут: https://stitcher.io/blog/new-in-php-8
[12] 3v4l.org: https://3v4l.org/
[13] Docker-образы: https://hub.docker.com/_/php?tab=tags&page=2
[14] `CurlHandle` class objects replace curl handlers: https://php.watch/versions/8.0/resource-CurlHandle
[15] твита: https://twitter.com/IvanChepurnyi/status/1276576154254786561
[16] показал: https://derickrethans.nl/a-quick-look-at-jit.html
[17] попробовал: https://stitcher.io/blog/jit-in-real-life-web-applications
[18] как вообще тестировать с JIT: https://beberlei.de/2020/07/05/what_to_look_out_for_when_testing_php_jit.html
[19] Открытое собеседование — ищем участников: https://t.me/phpdigest/160
[20] Валентином Удальцовым: https://twitter.com/vudaltsov
[21] [RFC] Shorter Attribute Syntax: https://wiki.php.net/rfc/shorter_attribute_syntax
[22] нашел способ: https://externals.io/message/110640#110819
[23] [RFC] Treat namespaced names as single token: https://wiki.php.net/rfc/namespaced_names_as_token
[24] [RFC] Match expression v2: https://wiki.php.net/rfc/match_expression_v2
[25] [RFC] Allow trailing comma in closure use lists: https://wiki.php.net/rfc/trailing_comma_in_closure_use_list
[26] [RFC] Property write/set visibility: https://wiki.php.net/rfc/property_write_visibility
[27] треду: https://externals.io/message/110768
[28] аксессорами: https://wiki.php.net/rfc/propertygetsetsyntax-v1.2
[29] ридонли свойствами: https://wiki.php.net/rfc/write_once_properties
[30] иммутабельными классами: https://wiki.php.net/rfc/immutability
[31] [RFC] Language Constructs Syntax Changes: https://wiki.php.net/rfc/language-constructs-syntax-changes
[32] [RFC] Saner numeric strings: https://wiki.php.net/rfc/saner-numeric-strings
[33] Guzzle 7: https://github.com/guzzle/guzzle
[34] PSR-18: https://www.php-fig.org/psr/psr-18/
[35] deligoez/xDebug-Toggler: https://github.com/deligoez/xDebug-Toggler
[36] denisyukphp/tmpfile-manager: https://github.com/denisyukphp/tmpfile-manager
[37] @jebox: https://twitter.com/jebox
[38] php-aidc/label-printer: https://github.com/php-aidc/label-printer
[39] jhaoda: https://habr.com/ru/users/jhaoda/
[40] EasyAdmin 3: https://github.com/EasyCorp/EasyAdminBundle
[41] ferrius/ddd-cqrs-example: https://github.com/ferrius/ddd-cqrs-example
[42] Неделя Symfony #705 (29 июня — 5 июля 2020): https://symfony.com/blog/a-week-of-symfony-705-29-june-5-july-2020
[43] 10 советов по тестированию в Symfony: https://habr.com/ru/company/mailru/blog/508376/
[44] [Symfony 5] Раздельная авторизация для админов и пользователей с двумя разными сущностями и формами входа: https://habr.com/ru/post/508936/
[45] Простое управление ACL в Symfony: https://habr.com/ru/company/otus/blog/508424/
[46] Laravel Worldwide Meetup: https://meetup.laravel.com/
[47] Laravel Idea 3.1: https://plugins.jetbrains.com/plugin/13441-laravel-idea
[48] Livewire: https://laravel-livewire.com/
[49] nWidart/laravel-modules: https://github.com/nWidart/laravel-modules
[50] scil/LaravelFly: https://github.com/scil/LaravelFly
[51] сравнение: https://github.com/scil/LaravelFly#similar-projects-that-mix-swoole-and-laravel
[52] Решение проблемы N+1 запроса без увеличения потребления памяти в Laravel: https://habr.com/ru/post/508544/
[53] Laravel-Дайджест (29 июня – 5 июля 2020): https://habr.com/ru/post/509662/
[54] June 24, 2020: https://twitter.com/taylorotwell/status/1275874807805067266?ref_src=twsrc%5Etfw
[55] amphp/websocket-server 2.0: https://github.com/amphp/websocket-server
[56] Amp: https://amphp.org/
[57] clue/reactphp-buzz: https://github.com/clue/reactphp-buzz/releases/tag/v2.9.0
[58] Путешествие в поисках утечки памяти: https://jolicode.com/blog/a-journey-to-find-a-memory-leak
[59] Как использовать PHP FFI в программировании: https://spiralscout.com/blog/how-to-use-php-ffi-in-programming
[60] 0xbigshaq/php7-internals: https://github.com/0xbigshaq/php7-internals
[61] Как будет выглядеть программирование в 2025?: https://tomasvotruba.com/blog/2020/06/29/how-will-programming-look-like-in-2025/
[62] Что делает max_execution_time?: https://aivis.dev/php-max-execution-time-explained
[63] Настраиваем Xdebug и PhpStorm для Symfony: https://www.strangebuzz.com/en/blog/step-by-step-debugging-with-xdebug-symfony-and-phpstorm
[64] Дебажим PHP-контейнер с помощью Xdebug и PhpStorm: https://habr.com/ru/company/otus/blog/507982/
[65] Как быть, когда все советуют растащить проект на микросервисы, а ты не готов: https://habr.com/ru/company/skyeng/blog/508286/
[66] Если вы используете моки, то вы хоть что-то тестируете?: https://habr.com/ru/company/mailru/blog/508254/
[67] Настройка отладки с Xdebug, PhpStorm и Laravel в Docker: https://vimeo.com/433218463
[68] Про PhpStorm на macOS Metal: https://www.youtube.com/watch?v=T0CShIFwyRw
[69] 25 лет PHP — история развития в наглядной инфографике: https://www.youtube.com/watch?v=FZ-3Qc89PEY
[70] Несколько видео с PHP fwdays 2020: https://www.youtube.com/user/fwdays/videos
[71] Как готовить код-ревью: https://www.youtube.com/watch?v=JP7lppzWaLg
[72] MoreView #11: https://www.youtube.com/watch?v=KvTQWv0phgE
[73] Интервью Александром Макаровым: https://www.youtube.com/watch?v=TI5Bl2tw4Ks
[74] Serverless Chats Podcast #55: https://www.youtube.com/watch?v=H8tkZcjQxOA
[75] Bref: https://github.com/brefphp/bref
[76] PHP Internals News #60 : https://phpinternals.news/60
[77] PHP Internals News #59: https://phpinternals.news/59
[78] именованных параметрах: https://wiki.php.net/rfc/named_params
[79] личку: https://habrahabr.ru/conversations/pronskiy/
[80] почту: mailto:roman@pronskiy.com
[81] твиттер: https://twitter.com/pronskiy
[82] PHP Digest: https://t.me/phpdigest
[83] Прислать ссылку: https://bit.ly/php-digest-add-link
[84] Поиск ссылок по всем дайджестам: https://pronskiy.com/php-digest/
[85] Предыдущий выпуск: PHP-Дайджест № 182: https://habr.com/ru/post/507636/
[86] Источник: https://habr.com/ru/post/509738/?utm_source=habrahabr&utm_medium=rss&utm_campaign=509738
Нажмите здесь для печати.