- PVSM.RU - https://www.pvsm.ru -

PHP-Дайджест № 173 (27 января – 10 февраля 2020)

PHP-Дайджест № 173 (27 января – 10 февраля 2020) - 1

Свежая подборка со ссылками на новости и материалы. В выпуске: PHPUnit 9 и другие релизы, 3 свежих RFC предложения из PHP Internals, порция полезных инструментов, видео, подкасты и многое другое.

Приятного чтения!

PHP-Дайджест № 173 (27 января – 10 февраля 2020) - 2 Новости и релизы

PHP-Дайджест № 173 (27 января – 10 февраля 2020) - 3 PHP Internals

  • [RFC] Allow function calls in constant expressions [9] — Сейчас в объявлениях констант можно использовать только литералы, константы и операции. В этом RFC предполагается добавить возможность вызова глобальных функций (всех или подмножество) в объявлениях констант, значений по умолчанию статических свойств, статических переменных и значений по умолчанию параметров.
    Скрытый текст

            class MyClass {
            const VALUES = [1, 0];
            const C1 = count(self::VALUES);
    
            public static $p = count(self::VALUES);
    
            public function foo($param = count(self::VALUES))
            {
            static $bar = count(self::VALUES);
            }
            }
            
  • [RFC] __toArray() [10] — Предлагается добавить новый магический метод __toArray(), который будет вызываться при явном приведении объекта к массиву, когда объект передаётся в качестве параметра функции с типом array или когда возвращается с указанием return type array.
    Скрытый текст

            class Person
            {
            protected $name;
            protected $email;
            public function __toArray()
            {
            return [
            'name' => $this->name,
            'email'  => $this->email,
            ];
            }
            }
    
            $person = new Person('John Doe', 'j.doe@example.com');
    
            $personArray = (array) $person; // вызывает __toArray()
    
            function foo(array $person) {
            var_dump($person); // Здесь массив
            }
    
            function bar(Person $person): array {
            return $person;
            }
    
            var_dump(bar($person)); // и здесь массив
            
  • [RFC] Userspace operator overloading [11] — Рассматривается возможность реализовать перегрузку операторов в PHP. Предложение пока в статусе черновика, но активно обсуждается [12] в Internals. А тем временем перегрузку операторов можно использовать в PHP 7.4 на основе lisachenko/z-engine [13].
  • [RFC] Validation for abstract trait methods [14] — Сигнатуры абстрактных методов из трейтов не валидируются на соответствие реализации. То есть вот такой код сейчас работает без ошибок:
    Скрытый текст

            trait T {
            abstract public function test(int $x);
            }
    
            class C {
            use T;
    
            // Работает сейчас, но не должно из-за несоответствия типов
            public function test(string $x) {}
            }
            

    Предлагается исправить это поведение.
    Ранее было опубликовано в виде пул-реквеста, но присутствует обратная несовместимость, которая требует пройти через RFC-процесс: если в текущем коде объявлен реализован абстрактный метод из трейта с другой сигнатурой, то изменение вызовет ошибку.

  • Предложения на голосовании: Static return type [15], Variable Syntax Tweaks [16], Allow ::class on objects [17], declare(function_and_const_lookup='global') [18]
  • Дженерики в PHP [19] — Никита Попов опубликовал результаты [20] исследования возможности реализации дженериков в PHP.
  • php/doc-en [21] — Документацию PHP на английском теперь можно редактировать через пул-реквесты на GitHub вместо старого редактора edit.php.net [22].

PHP-Дайджест № 173 (27 января – 10 февраля 2020) - 4 Инструменты

PHP-Дайджест № 173 (27 января – 10 февраля 2020) - 5 Symfony

PHP-Дайджест № 173 (27 января – 10 февраля 2020) - 6 Laravel

Async PHP

PHP-Дайджест № 173 (27 января – 10 февраля 2020) - 11 Материалы для обучения

PHP-Дайджест № 173 (27 января – 10 февраля 2020) - 16 Аудио/Видео

PHP-Дайджест № 173 (27 января – 10 февраля 2020) - 23 Занимательное

  • bragful/ephp [72] — Интерпретатор PHP на чистом Erlang.
  • Xdebug cloud [73] — На video конференции SunshinePHP (на 47:45) [74] Derick Rethans рассказал о новом проекте, цель которого упростить настройку Xdebug, особенно в случаях, когда могут быть трудности с сетью (Docker, удалённый сервер и тп). По сути – прокси.
  • PhpQuiz [75] — Telegram-канал, на котором публикуются задачи по PHP, архитектуре, PSR-стандартам и фреймворкам.

Спасибо за внимание!

Если вы заметили ошибку или неточность — сообщите, пожалуйста, в личку [76].
Вопросы и предложения пишите на почту [77] или в твиттер [78].

Telegram-канал: PHP Digest [79].

Прислать ссылку [80]
Поиск ссылок по всем дайджестам [81]
Предыдущий выпуск: PHP-Дайджест № 172 [82]

Автор: Роман Пронский

Источник [83]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/php-2/346106

Ссылки в тексте:

[1] Developer Ecosystem Survey 2020: https://surveys.jetbrains.com/s3/a10-developer-ecosystem-survey-2020

[2] PHP Internals: https://blog.jetbrains.com/phpstorm/2020/01/our-pledge-to-open-source/#a_php_internals_gathering

[3] Badoo PHP Meetup #4. Легаси: https://habr.com/ru/company/badoo/blog/485732/

[4] Первая встреча PHP-чата (с докладами): https://t.me/php_vrn/361

[5] 3-й PHP-митап городского чата: https://t.me/rndphp/2575

[6] PHP Russia 2020: https://phprussia.ru/moscow/2020/

[7] Nicolas Grekas: https://twitter.com/nicolasgrekas

[8] skyeng/php-communities: https://github.com/skyeng/php-communities

[9] [RFC] Allow function calls in constant expressions: https://wiki.php.net/rfc/calls_in_constant_expressions

[10] [RFC] __toArray(): https://wiki.php.net/rfc/to-array

[11] [RFC] Userspace operator overloading: https://wiki.php.net/rfc/userspace_operator_overloading

[12] активно обсуждается: https://externals.io/message/108300

[13] lisachenko/z-engine: https://github.com/lisachenko/z-engine#object-extensions-api

[14] [RFC] Validation for abstract trait methods: https://wiki.php.net/rfc/abstract_trait_method_validation

[15] Static return type: https://wiki.php.net/rfc/static_return_type

[16] Variable Syntax Tweaks: https://wiki.php.net/rfc/variable_syntax_tweaks

[17] Allow ::class on objects: https://wiki.php.net/rfc/class_name_literal_on_object

[18] declare(function_and_const_lookup='global'): https://wiki.php.net/rfc/use_global_elements

[19] Дженерики в PHP: https://t.me/phpdigest/117

[20] результаты: https://github.com/PHPGenerics/php-generics-rfc/issues/45

[21] php/doc-en: https://github.com/php/doc-en

[22] edit.php.net: https://edit.php.net/

[23] PHPUnit 9: https://phpunit.de/announcements/phpunit-9.html

[24] инструкции по апгрейду: https://thephp.cc/news/2020/02/migrating-to-phpunit-9

[25] php-ai/php-ml: https://github.com/php-ai/php-ml

[26] Документация на русском: https://php-ml.ru/

[27] salsify/jsonstreamingparser: https://github.com/salsify/jsonstreamingparser

[28] @IssecMura: https://twitter.com/IssecMura

[29] spatie/docker: https://github.com/spatie/docker

[30] kitetail/zttp: https://github.com/kitetail/zttp

[31] lisachenko/immutable-object: https://github.com/lisachenko/immutable-object

[32] lisachenko/z-engine: https://github.com/lisachenko/z-engine

[33] symfony/polyfill-php80: https://github.com/symfony/polyfill-php80

[34] paratestphp/paratest: https://github.com/paratestphp/paratest

[35] Неделя Symfony #684 (3-9 февраля 2020): https://symfony.com/blog/a-week-of-symfony-684-3-9-february-2020

[36] haruncpi/laravel-log-reader: https://github.com/haruncpi/laravel-log-reader

[37] calebporzio/sushi: https://github.com/calebporzio/sushi

[38] Использование примесей (mixin) в Laravel: https://liamhammett.com/laravel-mixins-KEzjmLrx

[39] Laravel больше чем CRUD: https://stitcher.io/laravel-beyond-crud

[40] 09. О тестовых фабриках: https://stitcher.io/blog/laravel-beyond-crud-09-test-factories

[41] Laravel Snippet #22: https://blog.laravel.com/laravel-snippet-22-laracon-online-inertiajs-livewire-spas-reviewing-the-day

[42] CLI интерфейс для Laravel Artisan: https://habr.com/ru/post/485952/

[43] «Архитектура сложных веб-приложений. С примерами на Laravel»: https://github.com/adelf/acwa_book_ru

[44] Сергей Жук беседует с Marc Morera: https://www.youtube.com/watch?v=uebhqc2BZXw

[45] автором (DriftPHP: https://github.com/driftphp

[46] driftphp/awesome-reactphp: https://github.com/driftphp/awesome-reactphp

[47] Новое в PHP 8: https://stitcher.io/blog/new-in-php-8

[48] Type matching in PHP: https://steemit.com/php/@crell/type-matching-in-php

[49] match из Rust: https://doc.rust-lang.org/rust-by-example/flow_control/match.html

[50] Enums without enums in PHP: https://stitcher.io/blog/enums-without-enums

[51] О том как писать PHPDoc для массивов: https://suckup.de/2020/02/modern-phpdoc-annotations/

[52] deep-assoc-completion: https://plugins.jetbrains.com/plugin/9927-deep-assoc-completion

[53] Об аспектно-ориентированном программировании в PHP: https://medium.com/@ivastly/application-instrumentation-with-aspect-oriented-programming-in-php-18b1defa682

[54] Go!AOP: https://github.com/goaop/framework

[55] Redux в 30 строк на PHP: https://sorin.live/redux-in-50-lines-of-php/

[56] эксплоиты: https://github.com/mm0r1/exploits

[57] разбор этого класса уязвимостей: https://x-c3ll.github.io//posts/UAF-PHP-disable_functions/

[58] Разработка приложений и Blue-Green deployment: https://habr.com/ru/post/480020/

[59] Работа с IPv6 в PHP: https://habr.com/ru/company/ua-hosting/blog/484586/

[60] Железо или оптимизация? Badoo, Авито и Мамба — о производительности PHP: https://habr.com/ru/company/badoo/blog/487234/

[61] Эволюция обработки вебхуков Facebook: с нуля до 25 000 в секунду: https://habr.com/ru/company/oleg-bunin/blog/486844/

[62] Большой видеокурс по Event Sourcing: https://eventsourcery.com/public-episodes

[63] О снэпшот-тестирования с PHPUnit: https://laracasts.com/series/guest-spotlight/episodes/6

[64] spatie/phpunit-snapshot-assertions: https://github.com/spatie/phpunit-snapshot-assertions

[65] Видеозаписи PHPKonf 2019: https://www.youtube.com/playlist?list=PLc15X3-Essu7Qc9lBGj-zZoYqhct8IESV

[66] как предложить свою идею для PHP чтоб её приняли: https://www.youtube.com/watch?v=AdKya1HLDZQ&list=PLc15X3-Essu7Qc9lBGj-zZoYqhct8IESV&index=9

[67] The Undercover ElePHPant #7: https://undercover-elephpant.com/episodes/talking-logging-for-production-applications-best-practices-with-jordi-boggiano

[68] monolog: https://github.com/Seldaek/monolog

[69] PHP Internals News #38: https://phpinternals.news/38

[70] PHP Internals News #39: https://phpinternals.news/39

[71] Stringable: https://wiki.php.net/rfc/stringable

[72] bragful/ephp: https://github.com/bragful/ephp

[73] Xdebug cloud: https://cloud.xdebug.com/

[74] конференции SunshinePHP (на 47:45): https://m.twitch.tv/videos/548927794

[75] PhpQuiz: https://t.me/phpquiz

[76] личку: https://habrahabr.ru/conversations/pronskiy/

[77] почту: mailto:roman@pronskiy.com

[78] твиттер: https://twitter.com/pronskiy

[79] PHP Digest: https://t.me/phpdigest

[80] Прислать ссылку: https://bit.ly/php-digest-add-link

[81] Поиск ссылок по всем дайджестам: https://pronskiy.com/php-digest/

[82] Предыдущий выпуск: PHP-Дайджест № 172: https://habr.com/ru/post/485592/

[83] Источник: https://habr.com/ru/post/487690/?utm_source=habrahabr&utm_medium=rss&utm_campaign=487690