- PVSM.RU - https://www.pvsm.ru -
Свежая подборка со ссылками на новости и материалы. В выпуске: 4 свежих RFC из PHP Internals и интересные пул-реквесты в PHP 8, порция полезных инструментов, подкасты, стримы и многое другое.
Приятного чтения!
static
в контексте декларации типа означает позднее статическое связывание [4]. Предлагается сделать возможным его использование в качестве возвращаемого типа методов. Удобно в текучих интерфейсах или статических конструкторах.
class Test {
public function doWhatever(): static {
// Do whatever.
return $this;
}
}
Для свойств класса и параметров методов это не имеет смысла и работать не будет.
$object::class
по аналогии с тем, как это работает сейчас FooBar::class
.use global functions;
и use global consts;
, которые заставят интерпретатор функции и константы без префиксов по-умолчанию искать в глобальном пространстве.Несколько изменений доступны в виде пул-реквестов:
function test(FooBar $param = null, $param2)
Раньше это могло иметь смысл, но с nullable типами можно написать function test(?FooBar $param, $param2)
.
trait T {
abstract function neededByTheTrait(int $a, string $b);
}
class C {
use T;
function neededByTheTrait(array $a, object $b) {}
}
Пул-реквест исправляет это поведение.
__toString()
и __clone()
, а вот такое, например, работает без ошибок:
class Foo {
function __get(int $name) {}
}
(new Foo)->{42};
composer.json
.Спасибо за внимание!
Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку [59].
Вопросы и предложения пишите на почту [60] или в твиттер [61].
Больше новостей и комментариев в Telegram-канале PHP Digest [62].
Прислать ссылку [63]
Поиск ссылок по всем дайджестам [64]
← Предыдущий выпуск: PHP-Дайджест № 170 [65]
Автор: Роман Пронский
Источник [66]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/php-2/342963
Ссылки в тексте:
[1] [RFC] Variable Syntax Tweaks: https://wiki.php.net/rfc/variable_syntax_tweaks
[2] Uniform Variable Syntax RFC: https://wiki.php.net/rfc/uniform_variable_syntax
[3] [RFC] Static return type: https://wiki.php.net/rfc/static_return_type
[4] позднее статическое связывание: https://www.php.net/manual/ru/language.oop5.late-static-bindings.php
[5] [RFC] Allow ::class on objects: https://wiki.php.net/rfc/class_name_literal_on_object
[6] [RFC] «use global functions/consts» statement: https://wiki.php.net/rfc/use_global_elements
[7] [RFC] Weak maps: https://wiki.php.net/rfc/weak_maps
[8] WeakMaps: https://t.me/phpdigest/104
[9] [PR] Deprecate required param after optional: https://github.com/php/php-src/pull/5067
[10] [PR] Check abstract method signatures coming from traits: https://github.com/php/php-src/pull/5068
[11] [PR] Ensure correct signatures for PHP magic methods: https://github.com/php/php-src/pull/4177
[12] nikic/PHP-Fuzzer: https://github.com/nikic/PHP-Fuzzer
[13] lukanetconsult/network-address-types: https://github.com/lukanetconsult/network-address-types
[14] carlosas/phpat: https://github.com/carlosas/phpat
[15] селекторов: https://github.com/carlosas/phpat/blob/master/doc/SELECTORS.md
[16] правил: https://github.com/carlosas/phpat/blob/master/doc/RULE_TYPES.md
[17] maglnet/ComposerRequireChecker: https://github.com/maglnet/ComposerRequireChecker
[18] php-service-bus/service-bus: https://github.com/php-service-bus/service-bus
[19] Amphp: https://github.com/amphp
[20] tigitz/php-spellchecker: https://github.com/tigitz/php-spellchecker
[21] franzliedke/studio: https://github.com/franzliedke/studio
[22] Symfony стал фреймворком с наибольшим числом контрибьюторов в 2019: https://symfony.com/blog/symfony-was-the-backend-framework-with-the-most-contributors-in-2019
[23] Обзор 2010х Symfony: https://symfony.com/blog/symfony-2010s-decade-in-review
[24] Неделя Symfony #680 (6-12 Января 2020): https://symfony.com/blog/a-week-of-symfony-680-6-12-january-2020
[25] laravel/airlock: https://github.com/laravel/airlock
[26] пост об использовании: https://medium.com/@JillevdWeerd/app-authentication-with-laravel-airlock-36e3d2027994
[27] Используем GitHub Actions для запуска тестов Laravel-проекта: https://freek.dev/1546-using-github-actions-to-run-the-tests-of-laravel-projects-and-packages
[28] Как избежать больших сигнатур функций с помощью отложенных объектов: https://freek.dev/1545-how-to-avoid-large-function-signatures-by-using-pending-objects
[29] Руководства по ролям и правам в Laravel: https://laravel.demiart.ru/guide-to-roles-and-permissions/
[30] Как разделить роли в проекте на Laravel: обзорное сравнение RBAC-пакетов: https://habr.com/ru/company/simbirsoft/blog/481796/
[31] Laravel. Локализованный роутинг: https://habr.com/ru/post/481726/
[32] Laravel Snippet #21: https://blog.laravel.com/laravel-snippet-21-artisan-inspire-vapor-multi-domain-support-laravel-airlock
[33] Новости Laminas: https://getlaminas.org/blog/2019-12-31-out-with-the-old-in-with-the-new.html
[34] https://github.com/laminas: https://github.com/laminas
[35] Друпал-дайджест — 2019/декабрь: https://habr.com/ru/post/482922/
[36] Видеокурс по Magento 2 для новичков: https://magemastery.net/courses/magento-2-beginner
[37] Правила работы с динамическими массивами и классами коллекций: https://matthiasnoback.nl/2020/01/rules-for-working-with-arrays-and-custom-collection-classes-in-php/
[38] Как разрабатывать и отлаживать PHP-приложения в Kubernetes: https://okteto.com/blog/how-to-develop-php-apps-in-kubernetes/
[39] О проблемах хеширования паролей на стороне сервера: https://blog.usejournal.com/hashing-passwords-on-the-server-side-a-dead-end-82669ee0253a
[40] Как сломать целую экосистему, опубликовав релиз: https://medium.com/@alcaeus/how-to-break-an-entire-ecosystem-by-publishing-a-release-b6aaab2b8aaa
[41] doctrine/persistence: https://github.com/doctrine/persistence
[42] как задепрекейтить тип в PHP: https://dev.to/greg0ire/how-to-deprecate-a-type-in-php-48cf
[43] Бенчмарки PHP 5.6 – 7.4 : https://kinsta.com/blog/php-benchmarks/
[44] Бенчмарки предзагрузки в PHP 7.4: https://stitcher.io/blog/php-preload-benchmarks
[45] Google хоронит расширение PHP IMAP: https://habr.com/ru/post/481786/
[46] Перевод PHP бэкенда на шину Redis streams: https://habr.com/ru/post/483584/
[47] Решение типовых проблем с json_encode: https://habr.com/ru/post/483492/
[48] Зачем ограничивать наследование с помощью final?: https://habr.com/ru/post/482154/
[49] SDCast #111: В гостях Сергей Жук, разработчик из Skyeng: https://sdcast.ksdaemon.ru/2019/12/sdcast-111/
[50] The Undercover ElePHPant #5: https://undercover-elephpant.com/episodes/integrating-with-third-party-apis-with-nils-adermann
[51] Nils Adermann: https://twitter.com/naderman
[52] Основные моменты: https://tideways.com/profiler/blog/reliable-integration-with-third-party-apis-in-php
[53] Рефакторинг сложных условных выражений: https://vimeo.com/381650670
[54] Как запускать тесты PHPUnit в PhpStorm: https://www.youtube.com/watch?v=7YnYz_SjVbI
[55] блог поста: https://matthewsetter.com/run-tests-in-phpstorm/
[56] Про Single Responsibility: https://www.youtube.com/watch?v=Q61TtJlWvfE
[57] Anna Filina: https://twitter.com/afilina
[58] The PHP Song: https://www.youtube.com/watch?v=V5jHHYFqt9o
[59] личку: https://habrahabr.ru/conversations/pronskiy/
[60] почту: mailto:roman@pronskiy.com
[61] твиттер: https://twitter.com/pronskiy
[62] PHP Digest: https://t.me/phpdigest
[63] Прислать ссылку: https://bit.ly/php-digest-add-link
[64] Поиск ссылок по всем дайджестам: https://pronskiy.com/php-digest/
[65] Предыдущий выпуск: PHP-Дайджест № 170: https://habr.com/ru/post/481564/
[66] Источник: https://habr.com/ru/post/483684/?utm_source=habrahabr&utm_medium=rss&utm_campaign=483684
Нажмите здесь для печати.