{"id":283734,"date":"2022-10-03T10:53:44","date_gmt":"2022-10-03T09:53:44","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=phpstorm&#038;p=283734"},"modified":"2024-01-09T17:58:56","modified_gmt":"2024-01-09T16:58:56","slug":"php-annotated-september-2022","status":"publish","type":"phpstorm","link":"https:\/\/blog.jetbrains.com\/phpstorm\/2022\/10\/php-annotated-september-2022\/","title":{"rendered":"PHP Annotated \u2013 September 2022"},"content":{"rendered":"<p><a href=\"https:\/\/blog.jetbrains.com\/phpstorm\/2022\/10\/php-annotated-september-2022\/\"><img decoding=\"async\" class=\"alignnone size-full\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/10\/php-annotated-blog-featured-image-1280x600-1.png\" alt=\"PHP Annotated Monthly\" width=\"900\"><\/a><\/p>\n<p>Greetings everyone!<\/p>\n<p>Welcome to the September installment of PHP Annotated, where we\u2019ll catch up on the most interesting things that have happened in the PHP world over the last month, including curated news, articles, tools, and videos.<\/p>\n<p><!--more--><\/p>\n<style>img.alignico {margin-right: 10px;margin-top: 5px;float: left;}  main ul:not([class]):not([id]) li, main .article-section .content ul:not([class]):not([id]) > li {padding-bottom: 18px;}  summary {display: list-item;cursor: pointer;font-style: italic; } main ul:not([class]):not([id]) li, main .article-section .content ul:not([class]):not([id]) > li ul li { padding-bottom: 0;}<\/style>\n<h2 id=\"news\">News<\/h2>\n<ul>\n<li><a href=\"https:\/\/www.php.net\/archive\/2022.php#2022-09-29-3\" target=\"_blank\" rel=\"noopener\"><strong>PHP 8.2 <\/strong><\/a><a href=\"https:\/\/www.php.net\/archive\/2022.php#2022-09-29-3\" target=\"_blank\" rel=\"noopener\"><strong>RC 3<\/strong><\/a><strong> has been released<\/strong><strong><br>\n    <\/strong>Another RC has been delivered according to the <a href=\"https:\/\/wiki.php.net\/todo\/php82\" target=\"_blank\" rel=\"noopener\">schedule<\/a>. The next RC 4 is expected on October 13.<p><\/p>\n<p>        For a detailed list of what\u2019s coming in PHP 8.2, see <a href=\"https:\/\/php.watch\/versions\/8.2\" target=\"_blank\" rel=\"noopener\">PHP.Watch<\/a> or <a href=\"https:\/\/stitcher.io\/blog\/new-in-php-82\" target=\"_blank\" rel=\"noopener\">stitcher.io<\/a>.<\/p>\n<p>        Also, check out the flash newsletter, <a href=\"https:\/\/stitcher.io\/blog\/road-to-php-82\" target=\"_blank\" rel=\"noopener\">The Road to PHP 8.2<\/a>.\n    <\/p>\n<\/li>\n<li><a href=\"https:\/\/www.php.net\/archive\/2022.php#2022-09-29-1\" target=\"_blank\" rel=\"noopener\"><strong>PHP 7.4.32<\/strong><\/a><strong>, <\/strong><a href=\"https:\/\/www.php.net\/archive\/2022.php#2022-09-30-1\" target=\"_blank\" rel=\"noopener\"><strong>PHP 8.0.24<\/strong><\/a><strong>,<\/strong><strong> and <\/strong><a href=\"https:\/\/www.php.net\/archive\/2022.php#2022-09-29-2\" target=\"_blank\" rel=\"noopener\"><strong>PHP 8.1.11<\/strong><\/a><strong> have been released<\/strong><br>\n        &#x2757;&#xfe0f;These are security releases of currently supported branches. <strong>All users are encouraged to upgrade.<\/strong>\n    <\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/phpstorm\/2022\/09\/phpstorm-2022-3-eap-is-open\/\"><strong>PhpStorm 2022.3 EAP Is Open!<\/strong><\/a><br>\n        Here\u2019s what you can already try as part of the Early Access Program for PhpStorm:<p><\/p>\n<ul>\n<li>Beta access to the new UI<\/li>\n<li>Full PHP 8.2 support<\/li>\n<li>Quick-fix previews<\/li>\n<li>And more<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2 id=\"php_core\">PHP Core<\/h2>\n<p>Most of the Core news is covered in detail in the <a href=\"https:\/\/thephp.foundation\/blog\/tag\/roundup\/\" target=\"_blank\" rel=\"noopener\"><strong>PHP Core Roundup series<\/strong><\/a> from the PHP Foundation. You can find all the latest developments of the PHP Core team in the <a href=\"https:\/\/thephp.foundation\/blog\/2022\/09\/30\/php-core-roundup-6\/\" target=\"_blank\" rel=\"noopener\">sixth episode<\/a> of the Roundup series, so we&#8217;ll only mention it briefly:<\/p>\n<ul>\n<li>&#x1f4ca; <a href=\"https:\/\/wiki.php.net\/rfc\/json_validate\" target=\"_blank\" rel=\"noopener\"><strong>RFC: json_validate<\/strong><\/a> #PHP 8.3<br>\n        In this RFC, Juan Carlos Morales proposes to add a new function called <code>json_validate()<\/code> that verifies if a string contains a valid JSON:<p><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\" data-enlighter-linenumbers=\"false\" data-enlighter-title=\"\">var_dump(json_validate(&#039;{ &quot;test&quot;: { &quot;foo&quot;: &quot;bar&quot; } }&#039;)); \/\/ true\n<\/pre>\n<\/li>\n<li>&#x1f4e3; <a href=\"https:\/\/wiki.php.net\/rfc\/improve_unserialize_error_handling\" target=\"_blank\" rel=\"noopener\"><strong>RFC: Improve <\/strong><\/a><a href=\"https:\/\/wiki.php.net\/rfc\/improve_unserialize_error_handling\" target=\"_blank\" rel=\"noopener\"><strong><code>unserialize()<\/code><\/strong><\/a><a href=\"https:\/\/wiki.php.net\/rfc\/improve_unserialize_error_handling\" target=\"_blank\" rel=\"noopener\"><strong> error handling<\/strong><\/a> #PHP 8.3<br>\n        Tim D\u00fcsterhus proposes adding a new <code>UnserializationFailedException<\/code>, which is thrown when unserialization fails:<p><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\" data-enlighter-linenumbers=\"false\" data-enlighter-title=\"\">try {    $result = unserialize($serialized);\n    var_dump($result);\n} catch (\\UnserializationFailureException $e) {\n    \/\/ unserialization failed\n}\n<\/pre>\n<\/li>\n<\/ul>\n<ul>\n<li>&#x1f4e3; <a href=\"https:\/\/wiki.php.net\/rfc\/glob_streamwrapper_support\" target=\"_blank\" rel=\"noopener\"><strong>RFC: StreamWrapper Support for <\/strong><\/a><a href=\"https:\/\/wiki.php.net\/rfc\/glob_streamwrapper_support\" target=\"_blank\" rel=\"noopener\"><strong><code>glob()<\/code><\/strong><\/a> #PHP 8.3<br>\n        Timmy Almroth proposes implementing <code>StreamWrappers<\/code> support for <code>glob()<\/code> function.<p><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\" data-enlighter-linenumbers=\"false\" data-enlighter-title=\"\">glob(&#039;vfs:\/\/*.ext&#039;)\n<\/pre>\n<\/li>\n<li>&#x261d;&#xfe0f; <a href=\"https:\/\/wiki.php.net\/rfc\/deprecations_php_8_3\" target=\"_blank\" rel=\"noopener\"><strong>RFC: Deprecations for PHP 8.3<\/strong><\/a><br>\n        An umbrella RFC that lists features to be considered for deprecation in PHP 8.3 and removal in PHP 9.<\/li>\n<\/ul>\n<h2 id=\"tools\">Tools<\/h2>\n<ul>\n<li><a href=\"https:\/\/play.phpsandbox.io\/\" target=\"_blank\" rel=\"noopener\">play.phpsandbox.io<\/a> \u2013 Try Composer packages right in your browser without installing anything. Brilliant!<\/li>\n<li><a href=\"https:\/\/github.com\/matthiasnoback\/php-ast-inspector\/\" target=\"_blank\" rel=\"noopener\">matthiasnoback\/php-ast-inspector<\/a> \u2013 A command-line step-debugger for your Abstract Syntax Tree. <a href=\"https:\/\/matthiasnoback.nl\/2022\/09\/a-step-debugger-for-the-php-ast\/\" target=\"_blank\" rel=\"noopener\">How to use it<\/a>.\n    <\/li>\n<li><a href=\"https:\/\/github.com\/kladskull\/xEroS\" target=\"_blank\" rel=\"noopener\">kladskull\/xEroS<\/a> \u2013 A Bitcoin-like blockchain written in 100% PHP. Good for educational purposes.\n    <\/li>\n<li><a href=\"https:\/\/github.com\/sfx101\/deck\" target=\"_blank\" rel=\"noopener\">sfx101\/deck<\/a> \u2013 A desktop tool to spin up Docker-based local dev environments in a single click.\n    <\/li>\n<li><a href=\"https:\/\/github.com\/cspray\/annotated-container\" target=\"_blank\" rel=\"noopener\">cspray\/annotated-container<\/a> \u2013 A dependency injection framework to configure a PSR-11 container with attributes!\n    <\/li>\n<li><a href=\"https:\/\/github.com\/phparkitect\/arkitect\" target=\"_blank\" rel=\"noopener\">phparkitect\/arkitect<\/a> \u2013 This tool lets you define architectural constraints for your PHP codebase to run them on CI.\n    <\/li>\n<li><a href=\"https:\/\/github.com\/openai-php\/client\" target=\"_blank\" rel=\"noopener\">openai-php\/client<\/a> \u2013 A client that allows you to interact with OpenAI API.<br>\n        There is also <a href=\"https:\/\/github.com\/orhanerday\/open-ai\" target=\"_blank\" rel=\"noopener\">orhanerday\/open-ai<\/a> if you need an alternative way to access OpenAI\u2019s GPT-3 API.\n    <\/li>\n<li><a href=\"https:\/\/github.com\/WordPress\/wordpress-wasm\" target=\"_blank\" rel=\"noopener\">WordPress\/wordpress-wasm<\/a> \u2013 Run WordPress in the browser thanks to WebAssembly magic.\n    <\/li>\n<li><a href=\"https:\/\/github.com\/nadrad\/h-m-m\" target=\"_blank\" rel=\"noopener\">nadrad\/h-m-m<\/a> \u2013 Hackers Mind Map \u2013 a simple, fast, keyboard-centric terminal-based tool for working with mind maps.\n<p>        The interesting thing is that it\u2019s just a single PHP file with literally zero dependencies. Neat!<br>\n        <img decoding=\"async\" src=\"https:\/\/github.com\/nadrad\/h-m-m\/blob\/main\/screenshot.png?raw=true\" width=\"600\">\n    <\/p>\n<\/li>\n<\/ul>\n<h2 id=\"symfony\">Symfony<\/h2>\n<ul>\n<li><a href=\"https:\/\/symfony.com\/blog\/revisiting-lazy-loading-proxies-in-php\" target=\"_blank\" rel=\"noopener\">Revisiting Lazy-Loading Proxies in PHP<\/a> by Nicolas Grekas.\n    <\/li>\n<li><a href=\"https:\/\/medium.com\/@ttbertrand\/symfony-paramconverter-the-best-friend-you-dont-know-yet-c31ef2251683\" target=\"_blank\" rel=\"noopener\">Symfony ParamConverter: the best friend you don\u2019t know yet<\/a> by Thomas Bertrand.\n    <\/li>\n<li><a href=\"https:\/\/blog.devgenius.io\/designing-a-symfony-validator-the-tdd-way-8cded85e88d1\" target=\"_blank\" rel=\"noopener\">Designing Symfony Validator the TDD way<\/a> by Mike Zukowsky.\n    <\/li>\n<li><a href=\"https:\/\/symfony.com\/blog\/solving-the-modern-applications-dilemma-with-symfony-ux\" target=\"_blank\" rel=\"noopener\">Solving the modern applications dilemma with Symfony UX<\/a> by Titouan Galopin.\n    <\/li>\n<li><a href=\"https:\/\/localheinz.com\/blog\/2022\/08\/29\/asserting-the-output-of-symfony-console-commands\/\" target=\"_blank\" rel=\"noopener\">Asserting the output of Symfony console commands<\/a> by Andreas M\u00f6ller.\n    <\/li>\n<li><a href=\"https:\/\/dev.to\/adgaray\/cqrs-with-symfony-messenger-2h3g\" target=\"_blank\" rel=\"noopener\">CQRS with Symfony Messenger<\/a> by Adrian Garay.\n    <\/li>\n<li><a href=\"https:\/\/github.com\/StenopePHP\/Stenope\" target=\"_blank\" rel=\"noopener\">StenopePHP\/Stenope<\/a> \u2013 A static website-building tool for Symfony. You can create a full-fledged Symfony app, and then deploy it as a static page wherever you want.\n    <\/li>\n<li><a href=\"https:\/\/github.com\/phpsword\/sword-bundle\" target=\"_blank\" rel=\"noopener\">phpsword\/sword-bundle<\/a> \u2013 Modern WordPress development with Symfony. Instead of being WordPress with extra features like <a href=\"https:\/\/github.com\/roots\/bedrock\/\" target=\"_blank\" rel=\"noopener\">roots\/bedrock<\/a>, Sword is a Symfony framework embedding WordPress. Learn more at <a href=\"https:\/\/getsword.com\/guide\/\" target=\"_blank\" rel=\"noopener\">What is Sword?<\/a>\n    <\/li>\n<\/ul>\n<h2 id=\"laravel\">Laravel<\/h2>\n<ul>\n<li>&#x1f468;&#x200d;&#x1f3eb; <a href=\"https:\/\/youtu.be\/f4QShF42c6E\" target=\"_blank\" rel=\"noopener\">Laracon Online<\/a> \u2013 All the talks from the Laravel community available on YouTube. Among other things, Celeb Porzio presented <a href=\"https:\/\/www.youtube.com\/watch?v=f4QShF42c6E&amp;t=6014s\" target=\"_blank\" rel=\"noopener\">the future of Livewire<\/a>, and Taylor Otwell announced <a href=\"https:\/\/laravel-news.com\/laravel-bootcamp\" target=\"_blank\" rel=\"noopener\">Laravel Bootcamp<\/a> \u2013 A brand new learning site from the Laravel team.\n    <\/li>\n<li>&#x1f4fa; <a href=\"https:\/\/www.youtube.com\/watch?v=Cag12UXFjtM\" target=\"_blank\" rel=\"noopener\">What&#8217;s new in Laravel<\/a> <a href=\"https:\/\/www.youtube.com\/watch?v=xWPRcaHy3do\" target=\"_blank\" rel=\"noopener\">9.31.0<\/a> \u2013 Concise video overview from Christoph Rumpel.\n    <\/li>\n<li><a href=\"https:\/\/laravel-news.com\/working-with-os-process-in-php\" target=\"_blank\" rel=\"noopener\">Working with OS <\/a><a href=\"https:\/\/laravel-news.com\/working-with-os-process-in-php\" target=\"_blank\" rel=\"noopener\">process<\/a><a href=\"https:\/\/laravel-news.com\/working-with-os-process-in-php\" target=\"_blank\" rel=\"noopener\"> in PHP<\/a> by Steve (King) McDougall.\n    <\/li>\n<li><a href=\"https:\/\/blog.codito.dev\/2022\/08\/drawbacks-behind-laravel-facades\/\" target=\"_blank\" rel=\"noopener\">Drawbacks behind Laravel Facades<\/a> by Grzegorz Korba.\n    <\/li>\n<li><a href=\"https:\/\/www.honeybadger.io\/blog\/laravel-queues-deep-dive\/\" target=\"_blank\" rel=\"noopener\">A Deep Dive Into Laravel Queues<\/a> by Farhan Hasin Chowdhury.\n    <\/li>\n<li><a href=\"https:\/\/github.com\/Sammyjo20\/laravel-haystack\" target=\"_blank\" rel=\"noopener\">Sammyjo20\/laravel-haystack<\/a> \u2013 Beautifully simple but powerful database-driven job chains.\n    <\/li>\n<li><a href=\"https:\/\/github.com\/dietercoopman\/mailspfchecker\/\" target=\"_blank\" rel=\"noopener\">dietercoopman<\/a><a href=\"https:\/\/github.com\/dietercoopman\/mailspfchecker\/\" target=\"_blank\" rel=\"noopener\">\/<\/a><a href=\"https:\/\/github.com\/dietercoopman\/mailspfchecker\/\" target=\"_blank\" rel=\"noopener\">mailspfchecker<\/a> \u2013 A package to check if you can send an email through a given mail server on behalf of a given email address. <a href=\"https:\/\/laravel-news.com\/mailspfchecker\" target=\"_blank\" rel=\"noopener\">How to use it<\/a>.\n    <\/li>\n<li><a href=\"https:\/\/github.com\/ksassnowski\/venture\" target=\"_blank\" rel=\"noopener\">ksassnowski\/venture<\/a> 4.0.0 \u2013 A package to create and manage complex async workflows in your Laravel apps.\n    <\/li>\n<li><a href=\"https:\/\/github.com\/YorCreative\/Laravel-Scrubber\" target=\"_blank\" rel=\"noopener\">YorCreative<\/a><a href=\"https:\/\/github.com\/YorCreative\/Laravel-Scrubber\" target=\"_blank\" rel=\"noopener\">\/Laravel-Scrubber<\/a> \u2013 A package to scrub sensitive information that breaks operational security policies from being leaked, accidentally or otherwise, by developers. <a href=\"https:\/\/laravel-news.com\/laravel-scrubber\" target=\"_blank\" rel=\"noopener\">How to use it<\/a>.\n    <\/li>\n<li><a href=\"https:\/\/github.com\/hotmeteor\/receiver\" target=\"_blank\" rel=\"noopener\">hotmeteor\/receiver<\/a> \u2013 A drop-in webhook handling library for Laravel.\n    <\/li>\n<li><a href=\"https:\/\/github.com\/dedoc\/scramble\" target=\"_blank\" rel=\"noopener\">dedoc\/scramble<\/a> \u2013 An automatic OpenAPI docs generator for Laravel. No PHPDoc annotations required.\n    <\/li>\n<li><a href=\"https:\/\/findapr.io\/\" target=\"_blank\" rel=\"noopener\">findapr.io<\/a> \u2013 A site to help you find open-source Laravel and PHP projects to contribute to.\n    <\/li>\n<\/ul>\n<h2 id=\"other_frameworks\">Other Frameworks<\/h2>\n<ul>\n<li><a href=\"https:\/\/github.com\/spiral\/framework\/releases\/tag\/3.0.0\" target=\"_blank\" rel=\"noopener\">spiral\/framework<\/a> <a href=\"https:\/\/github.com\/spiral\/framework\/releases\/tag\/3.0.0\" target=\"_blank\" rel=\"noopener\">v3.0.0<\/a> \u2013 A major update of the framework from the creators of <a href=\"https:\/\/github.com\/roadrunner-server\/roadrunner\" target=\"_blank\" rel=\"noopener\">RoadRunner<\/a>.<br>\n        It requires PHP 8.1 and brings new filters and validation, job serializers, an error handler, queue and console interceptors, an event dispatcher (PSR-14), injectable enums, a more flexible router, optimized bootloaders, and better performance.\n    <\/li>\n<li><a href=\"https:\/\/github.com\/phalcon\/cphalcon\" target=\"_blank\" rel=\"noopener\">Phalcon PHP Framework<\/a> reached its major <a href=\"https:\/\/docs.phalcon.io\/5.0\/en\/upgrade\" target=\"_blank\" rel=\"noopener\">5.0<\/a> release.<br>\n        Phalcon is a unique framework because it comes as a PHP extension. But according to <a href=\"https:\/\/blog.phalcon.io\/post\/phalcon-roadmap\" target=\"_blank\" rel=\"noopener\">the roadmap<\/a>, the team decided to switch to a traditional model, and the next major release is planned to be a PHP package.<br>\n        For a detailed list of what\u2019s new in 5.0, check out the <a href=\"https:\/\/docs.phalcon.io\/5.0\/en\/upgrade\" target=\"_blank\" rel=\"noopener\">Upgrade<\/a> page.\n    <\/li>\n<li><a href=\"https:\/\/github.com\/api-platform\/api-platform\/releases\/tag\/v3.0.0\" target=\"_blank\" rel=\"noopener\">api-platform\/api-platform 3.0<\/a> \u2013 Built on top of Symfony, this mature framework allows creating REST and GraphQL APIs and much more.\n    <\/li>\n<li><a href=\"https:\/\/appwrite.io\/1.0\" target=\"_blank\" rel=\"noopener\">Appwrite 1.0<\/a> \u2013 A major stable release of an open-source backend-as-a-service solution that provides APIs required for building a modern web or mobile application.\n<p>        Last year <a href=\"https:\/\/eldadfux.medium.com\/moving-from-nginx-fpm-to-swoole-has-increased-our-php-api-performance-by-91-40f62e51a064\" target=\"_blank\" rel=\"noopener\">Appwrite migrated from nginx+php-fpm to Swoole<\/a> and experienced a 91% performance boost.<\/p>\n<\/li>\n<\/ul>\n<blockquote class=\"twitter-tweet\">\n<p lang=\"en\" dir=\"ltr\">Life is too short to argue which framework is best.<\/p>\n<p>Just use what&#8217;s good for you and move on &#x1f44d;&#x1f3fb;<\/p>\n<p>\u2014 James Brooks &#x1f96d; (@jbrooksuk) <a href=\"https:\/\/twitter.com\/jbrooksuk\/status\/1572224525626122243?ref_src=twsrc%5Etfw\" target=\"_blank\" rel=\"noopener\">September 20, 2022<\/a><\/p>\n<\/blockquote>\n<h2 id=\"misc\">Misc<\/h2>\n<ul>\n<li><a href=\"https:\/\/stitcher.io\/blog\/thoughts-on-asymmetric-visibility\" target=\"_blank\" rel=\"noopener\">Asymmetric visions<\/a> by Brent Roose.\n    <\/li>\n<li><a href=\"https:\/\/andreas.heigl.org\/2022\/08\/28\/increase-code-coverage-successively\/\" target=\"_blank\" rel=\"noopener\">Increase code coverage successively<\/a> by Andreas Heigl.\n    <\/li>\n<li><a href=\"https:\/\/php.watch\/articles\/testing-php-rand-functions\" target=\"_blank\" rel=\"noopener\">Testing Randomness of PHP Random Number Functions<\/a> by Ayesh Karunaratne.\n    <\/li>\n<li><a href=\"https:\/\/sebastiandedeyne.com\/granular-interfaces\/\" target=\"_blank\" rel=\"noopener\">Granular interfaces<\/a> by Sebastian De Deyne.\n    <\/li>\n<li><a href=\"https:\/\/www.exakat.io\/en\/adding-the-last-types-to-php-code\/\" target=\"_blank\" rel=\"noopener\">Adding the last types to PHP code<\/a> by Damien Seguy.\n    <\/li>\n<li><a href=\"https:\/\/www.exakat.io\/en\/the-three-nothings-of-php\/\" target=\"_blank\" rel=\"noopener\">The three nothings of PHP<\/a> by Damien Seguy explaining the difference between <code>null<\/code>, <code>void<\/code>, and <code>uninitialized<\/code>.\n    <\/li>\n<li><a href=\"https:\/\/matthiasnoback.nl\/2022\/09\/is-it-a-dto-or-a-value-object\/\" target=\"_blank\" rel=\"noopener\">Is it a DTO or a Value Object?<\/a> by Matthias Noback.\n    <\/li>\n<li><a href=\"https:\/\/sebastiandedeyne.com\/named-arguments\/\" target=\"_blank\" rel=\"noopener\">Named arguments<\/a> by Sebastian De Deyne.\n    <\/li>\n<li><a href=\"https:\/\/matthiasnoback.nl\/2022\/09\/can-we-consider-datetimeimmutable-a-primitive-type\/\" target=\"_blank\" rel=\"noopener\">Can we consider DateTimeImmutable a primitive type?<\/a> \u2013 Matthias Noback concludes \u201cnot\u201d, Andreas M\u00f6ller goes further in his <a href=\"https:\/\/localheinz.com\/blog\/2022\/09\/20\/enhancing-types\/\" target=\"_blank\" rel=\"noopener\">Enhancing types<\/a> blog post and suggests it\u2019s a <em>simple<\/em> type.\n    <\/li>\n<li><a href=\"https:\/\/dev.to\/mrsuh\/how-php-engine-builds-ast-1nc4\" target=\"_blank\" rel=\"noopener\">How PHP engine builds AST<\/a> by Anton Sukhachev.\n    <\/li>\n<li><a href=\"https:\/\/olleharstedt.github.io\/programming\/2022\/06\/11\/pholyglot-php-to-php-c-transpiler.html\" target=\"_blank\" rel=\"noopener\">Pholyglot<\/a><a href=\"https:\/\/olleharstedt.github.io\/programming\/2022\/06\/11\/pholyglot-php-to-php-c-transpiler.html\" target=\"_blank\" rel=\"noopener\"> (PHP to PHP+C polyglot transpiler)<\/a> \u2013 A small hobby project transpiler that takes a subset of PHP as input, and outputs polyglot code that can be run in both PHP and C.\n    <\/li>\n<li><a href=\"https:\/\/dev.to\/manomano-tech-team\/plotting-the-memory-of-a-php-process-with-gnuplot-3k02\" target=\"_blank\" rel=\"noopener\">Plotting the memory of a PHP process with Gnuplot<\/a> by Gr\u00e9goire Paris.\n    <\/li>\n<\/ul>\n<blockquote class=\"twitter-tweet\">\n<p lang=\"en\" dir=\"ltr\">Have you ever wondered what a particular piece of code is doing?<\/p>\n<p>Say hello to TLDR <a href=\"https:\/\/t.co\/wATh13uJyD\" target=\"_blank\">pic.twitter.com\/wATh13uJyD<\/a><\/p>\n<p>\u2014 Marcel Pociot &#x1f9ea; (@marcelpociot) <a href=\"https:\/\/twitter.com\/marcelpociot\/status\/1572690548074348549?ref_src=twsrc%5Etfw\" target=\"_blank\" rel=\"noopener\">September 21, 2022<\/a><\/p>\n<\/blockquote>\n<h2 id=\"video\">Video<\/h2>\n<ul>\n<li>&#x1f4fa; <a href=\"https:\/\/laracasts.com\/series\/php-for-beginners-2023-edition\" target=\"_blank\" rel=\"noopener\">PHP For Beginners<\/a> \u2013 If someone asks you \u201cHow do I learn PHP in 2022?\u201d, the answer is this course by Jeffrey Way.\n    <\/li>\n<li>&#x1f4fa; <a href=\"https:\/\/www.youtube.com\/watch?v=ppBhz7KMjWc\" target=\"_blank\" rel=\"noopener\">PHP in 1 minute<\/a> by Brent Roose<strong>.<br>\n    <\/strong><\/li>\n<li>&#x1f4fa; <a href=\"https:\/\/youtu.be\/dzf0Du1W4DQ\" target=\"_blank\" rel=\"noopener\">PHP is breaking my code!<\/a> by Brent Roose.\n    <\/li>\n<li>&#x1f4fa; <a href=\"https:\/\/laracasts.com\/series\/pest-from-scratch\" target=\"_blank\" rel=\"noopener\">Pest From Scratch<\/a> with Luke Downing.\n    <\/li>\n<\/ul>\n<h2 id=\"conferences\">Conferences<\/h2>\n<p>In-person events are in full swing. Check out these upcoming big PHP gigs worth visiting and applying to CFP:<\/p>\n<ul>\n<li><a href=\"https:\/\/event.afup.org\/\" target=\"_blank\" rel=\"noopener\">ForumPHP<\/a> \u2013 Disneyland Paris (France), October 13\u201314.\n    <\/li>\n<li><a href=\"https:\/\/phpconference.com\/munich\" target=\"_blank\" rel=\"noopener\">International PHP Conference<\/a> \u2013 Munich (Germany), October 24\u201328.\n    <\/li>\n<li><a href=\"https:\/\/www.longhornphp.com\/php-is-the-right-choice-in-2022-and-beyond\" target=\"_blank\" rel=\"noopener\">Longhorn PHP<\/a> \u2013 Austin, TX (US), November 3\u20135.\n    <\/li>\n<li><a href=\"https:\/\/live.symfony.com\/2022-paris-con\/\" target=\"_blank\" rel=\"noopener\">SymfonyCon<\/a> \u2013 Disneyland Paris (France), November 17\u201318.\n    <\/li>\n<li><a href=\"https:\/\/www.phpconference.co.uk\/\" target=\"_blank\" rel=\"noopener\">PHP UK Conference<\/a> \u2013 London (UK), February 14\u201316, 2023.\n    <\/li>\n<\/ul>\n<p>And if you are wondering <a href=\"https:\/\/friendsofphp.org\/\" target=\"_blank\" rel=\"noopener\">When is the Next PHP Meetup?<\/a> \u2013 Tomas Votruba has got you covered with his lovely <a href=\"https:\/\/friendsofphp.org\/\" target=\"_blank\" rel=\"noopener\">friendsofphp.org<\/a> meetup aggregator.\n<\/p>\n<p><\/p>\n<hr>\n<p>\nThat&#8217;s all for today, thanks for reading!\n<\/p>\n<p>\nIf you have any interesting or useful links to share via PHP Annotated, please leave a comment on this post or send me a <a href=\"https:\/\/twitter.com\/pronskiy\" target=\"_blank\" rel=\"noopener\">tweet<\/a>.\n<\/p>\n<p style=\"text-align: left;\" align=\"center\"><a class=\"jb-download-button\" title=\"Complete this form and get PHP Annotated Monthly delivered fresh to your email\" href=\"https:\/\/info.jetbrains.com\/PHP-Annotated-Subscription.html\" target=\"_blank\" rel=\"noopener\">Subscribe to PHP Annotated<\/a><\/p>\n<p><em>Your JetBrains PhpStorm team<\/em><br>\n<em>The Drive to Develop<\/em><br>\n<script async=\"\" src=\"https:\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"><\/script><\/p>\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                                                            <div class=\"about-author__box-img\">\n                            <img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/07\/php-annotated-roman.png\" alt=\"\" loading=\"lazy\">\n                        <\/div>\n                                        <div class=\"about-author__box-text\">\n                                                    <h4>Roman Pronskiy<\/h4>\n                                                <p>Product marketing manager for <a href=\"https:\/\/twitter.com\/PhpStorm\" target=\"_blank\" rel=\"noopener\">@PhpStorm<\/a>, helped to launch <a href=\"https:\/\/twitter.com\/ThePHPF\" target=\"_blank\" rel=\"noopener\">@The&nbsp;PHP&nbsp;Foundation<\/a>.<\/p>\n<p><a href=\"https:\/\/twitter.com\/pronskiy\" target=\"_blank\" rel=\"noopener\">Twitter<\/a> | <a href=\"https:\/\/github.com\/pronskiy\" target=\"_blank\" rel=\"noopener\">GitHub<\/a><\/p>\n                    <\/div>\n                            <\/div>\n        <\/div>\n    <\/div>\n\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                                                            <div class=\"about-author__box-img\">\n                            <img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/07\/php-annotated-sergey.png\" alt=\"\" loading=\"lazy\">\n                        <\/div>\n                                        <div class=\"about-author__box-text\">\n                                                    <h4>Sergey Panteleev<\/h4>\n                                                <p>PHP 8.2 release manager, PHP Documentation maintainer.<\/p>\n<p><a href=\"https:\/\/twitter.com\/s_panteleev\" target=\"_blank\" rel=\"noopener\">Twitter<\/a> | <a href=\"https:\/\/github.com\/saundefined\" target=\"_blank\" rel=\"noopener\">GitHub<\/a><\/p>\n                    <\/div>\n                            <\/div>\n        <\/div>\n    <\/div>\n","protected":false},"author":869,"featured_media":283738,"comment_status":"closed","ping_status":"closed","template":"","categories":[],"tags":[2213,190,6755,2323,359,2648,191],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/phpstorm\/283734"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/phpstorm"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/types\/phpstorm"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/users\/869"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/comments?post=283734"}],"version-history":[{"count":11,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/phpstorm\/283734\/revisions"}],"predecessor-version":[{"id":293319,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/phpstorm\/283734\/revisions\/293319"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/media\/283738"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/media?parent=283734"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/categories?post=283734"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/tags?post=283734"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/cross-post-tag?post=283734"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}