{"id":480174,"date":"2024-06-04T16:08:10","date_gmt":"2024-06-04T15:08:10","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=phpstorm&#038;p=480174"},"modified":"2025-02-05T11:53:25","modified_gmt":"2025-02-05T10:53:25","slug":"php-annotated-may-2024","status":"publish","type":"phpstorm","link":"https:\/\/blog.jetbrains.com\/en\/phpstorm\/2024\/06\/php-annotated-may-2024","title":{"rendered":"PHP Annotated \u2013 May 2024"},"content":{"rendered":"<p><a href=\"https:\/\/blog.jetbrains.com\/phpstorm\/2024\/06\/php-annotated-may-2024\/\"><img decoding=\"async\" class=\"alignnone size-full\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/06\/php-annotated-featured_blog_1280x720.png\" alt=\"PHP Annotated Monthly\" width=\"900\"><\/a><br \/>\nWelcome to the May edition of PHP Annotated! We&#8217;ll recap the most interesting developments in the PHP community over the past couple of months, featuring handpicked news, articles, tools, and videos.<br \/>\n<!--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;} section.article-section a {color: #7755f3} code {color: red;} #roman-pronskiy,.copy-heading:has(#roman-pronskiy){margin-top: 0;}<\/style>\n<h2 id=\"highlights\">Highlights<\/h2>\n<ul>\n<li><a href=\"https:\/\/www.php.net\/ChangeLog-8.php#8.2.19\" target=\"_blank\" rel=\"noopener\"><strong>PHP 8.2.19<\/strong><\/a><strong>, and <\/strong><a href=\"https:\/\/www.php.net\/ChangeLog-8.php#8.3.7\" target=\"_blank\" rel=\"noopener\"><strong>PHP 8.3.7<\/strong><\/a><strong> released<\/strong><br \/>\n        These are bug fix releases.\n    <\/li>\n<li><a href=\"https:\/\/idx.google.com\/\" target=\"_blank\" rel=\"noopener\"><strong>Projects IDX<\/strong><\/a><br \/>\n        Google announced their new online development environment tool. And it comes with a Laravel template out of the box: <a href=\"https:\/\/idx.google.com\/new\/laravel\" target=\"_blank\" rel=\"noopener\">https:\/\/idx.google.com\/new\/laravel<\/a>.<\/p>\n<p>        Would be nice to have a vanilla PHP environment and PHP Core environment available too.\n    <\/li>\n<li><strong><a href=\"https:\/\/www.drupal.org\/association\/blog\/drupal-lead-dries-buytaert-announces-the-guiding-star-for-a-new-version-of-the-drupal-cms-23-years\" target=\"_blank\" rel=\"noopener\">Drupal lead Dries Buytaert announces the guiding star for a new version of the Drupal<\/a><\/strong><br \/>\n        During his <a href=\"https:\/\/www.youtube.com\/watch?v=I95hSyocMlg&#038;t=1198s\" target=\"_blank\" rel=\"noopener\">DrupalCon keynote<\/a>, Dries announced <a href=\"https:\/\/www.drupal.org\/starshot\" target=\"_blank\" rel=\"noopener\">Drupal Starshot<\/a>.<br \/>\n        It is not a brand-new CMS, but more like Drupal with a better user experience.<\/p>\n<p>        Drupal Starshot will leverage Drupal Core but have a different governance model to move quickly, allowing for more innovation.\n    <\/li>\n<\/ul>\n<h2 id=\"php_core\">PHP Core<\/h2>\n<ul>\n<li>\u2705 <a href=\"https:\/\/wiki.php.net\/rfc\/new_without_parentheses\" target=\"_blank\" rel=\"noopener\"><strong>RFC: new MyClass()-&gt;method() without parentheses<\/strong><\/a><br \/>\n        PHP 8.4 will allow omitting parentheses in chained method calls with <code>new<\/code> operator:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\" data-enlighter-linenumbers=\"false\" data-enlighter-title=\"\">\n\/\/ OK\n$request = (new Request())-&gt;withMethod(&#039;GET&#039;)-&gt;withUri(&#039;\/hello-world&#039;);\n\n\/\/ Also OK\n$request = new Request()-&gt;withMethod(&#039;GET&#039;)-&gt;withUri(&#039;\/hello-world&#039;);\n<\/pre>\n<\/li>\n<li><strong>\u2705 <\/strong><a href=\"https:\/\/wiki.php.net\/rfc\/support_object_type_in_bcmath\" target=\"_blank\" rel=\"noopener\"><strong>RFC: Support object type in BCMath<\/strong><\/a><br \/>\n        PHP 8.4 will have an object API and operator overloading to handle arbitrary precision numbers.\n    <\/li>\n<li><strong>\u2705 <\/strong><a href=\"https:\/\/wiki.php.net\/rfc\/array_find\" target=\"_blank\" rel=\"noopener\"><strong>RFC: array_find<\/strong><\/a><br \/>\n        PHP 8.4 will also include four new functions to work with arrays: <code>array_find()<\/code>, <code>array_find_key()<\/code>, <code>array_any()<\/code>, and <code>array_all()<\/code>.\n    <\/li>\n<li><strong>? <\/strong><a href=\"https:\/\/wiki.php.net\/rfc\/deprecated_attribute\" target=\"_blank\" rel=\"noopener\"><strong>RFC: #[\\Deprecated] Attribute<\/strong><\/a><br \/>\n        Benjamin Eberlei and Tim D\u00fcsterhus propose adding a new attribute <code>#[\\Deprecated]<\/code> with an optional <code>message<\/code> and <code>since<\/code> parameters. The latter would indicate a date or a version since which a function or constant is deprecated. The current proposal does not include support for class or property deprecations.<\/p>\n<p>        Meanwhile, there is a <code>#[\\JetBrains\\PhpStorm\\Deprecated]<\/code> attribute with optional <code>reason<\/code>, <code>replacement<\/code>, and <code>since<\/code> parameters, which is supported by PhpStorm and static analyzers.<\/p>\n<p>        <img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2020\/10\/deprecated_symfony.gif\" alt=\"\"><\/p>\n<p>        See other PhpStorm attributes here: <a href=\"https:\/\/github.com\/JetBrains\/phpstorm-attributes\" target=\"_blank\" rel=\"noopener\">JetBrains\/phpstorm-attributes<\/a>.\n    <\/li>\n<li>? <a href=\"https:\/\/wiki.php.net\/rfc\/dom_additions_84\" target=\"_blank\" rel=\"noopener\"><strong>RFC: New ext-dom features in PHP 8.4<\/strong><\/a><br \/>\n        Niels Dossche continues to improve the DOM extension. In this RFC, he proposes adding support for CSS selectors, filling in missing but common features, and adding new properties.\n    <\/li>\n<li>? <a href=\"https:\/\/wiki.php.net\/rfc\/exit-as-function\" target=\"_blank\" rel=\"noopener\"><strong>RFC: Transform exit() from a language construct into a standard function<\/strong><\/a><br \/>\n        Having <code>exit()<\/code> as a language construct in PHP brings a few inconsistencies: it cannot be called with a named argument, passed to functions as a callable, does not respect the <code>strict_types<\/code> declaration, and most confusingly, it does not follow the usual type juggling semantics.<br \/>\n            Gina Peter Banyard proposes to make <code>exit()<\/code> a standard function:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\" data-enlighter-linenumbers=\"false\" data-enlighter-title=\"\">\nfunction exit(string|int $status = 0): never {}\n<\/pre>\n<\/li>\n<li><a href=\"https:\/\/github.com\/scheibling\/go-c-shared\" target=\"_blank\" rel=\"noopener\">scheibling\/go-c-shared<\/a> \u2013 Examples for using the Go buildmode c-shared to build modules for other languages. Specifically, it comes with a PHP extension example.\n    <\/li>\n<\/ul>\n<h2 id=\"tools\">Tools<\/h2>\n<ul>\n<li><a href=\"https:\/\/github.com\/buggregator\/server\" target=\"_blank\" rel=\"noopener\">buggregator\/server<\/a> \u2013 A lightweight, standalone server that offers a range of debugging features for PHP applications.\n    <\/li>\n<li><a href=\"https:\/\/github.com\/azjezz\/assess\" target=\"_blank\" rel=\"noopener\">azjezz\/assess<\/a> \u2013 Unix filesystem notifications library for PHP. Watch your filesystem for changes without any JS dependencies!\n    <\/li>\n<li><a href=\"https:\/\/github.com\/neutomic\/neutomic\" target=\"_blank\" rel=\"noopener\">neutomic\/neutomic<\/a> \u2013 An asynchronous, lightweight PHP framework tailored for long-running process environments. Built on top of <a href=\"https:\/\/amphp.org\/\" target=\"_blank\" rel=\"noopener\">AMPHP<\/a>, it has a slick API and nice tooling.\n    <\/li>\n<li><a href=\"https:\/\/github.com\/phasync\/phasync\" target=\"_blank\" rel=\"noopener\">phasync\/phasync<\/a> \u2013 A micro framework for ultra-high-performance PHP websites with non-blocking IO.\n<p>        It comes with a CHATBOT.txt file with a prompt to help you integrate the tool into your project. And it also has a <a href=\"https:\/\/github.com\/phasync\/file-streamwrapper\" target=\"_blank\" rel=\"noopener\">phasync\/file-streamwrapper<\/a> to make IO operations in existing projects transparently async. This would affect performance, though, wouldn&#8217;t it?\n    <\/li>\n<li><a href=\"https:\/\/github.com\/jolicode\/automapper\" target=\"_blank\" rel=\"noopener\">jolicode\/automapper<\/a> \u2013 A tool to do automatic object-to-object conversion. <a href=\"https:\/\/jolicode.com\/blog\/automapper-9-is-out\" target=\"_blank\" rel=\"noopener\">The 9.0 release<\/a> comes with many DX improvements.\n    <\/li>\n<li><a href=\"https:\/\/github.com\/NoiseByNorthwest\/php-spx\" target=\"_blank\" rel=\"noopener\">NoiseByNorthwest\/php-spx<\/a> \u2013 A simple &amp; straight-to-the-point PHP profiling extension with its built-in web UI.\n    <\/li>\n<li><a href=\"https:\/\/github.com\/PHP-CS-Fixer\/PHP-CS-Fixer\" target=\"_blank\" rel=\"noopener\">PHP-CS-Fixer<\/a> \u2013 The tool to automatically fix PHP Coding Standards issues now can run in parallelized mode.\n    <\/li>\n<li><a href=\"https:\/\/github.com\/TomasVotruba\/phpstan-bodyscan\" target=\"_blank\" rel=\"noopener\">TomasVotruba\/phpstan-bodyscan<\/a> \u2013 Get error count for each PHPStan level.\n    <\/li>\n<li><a href=\"https:\/\/github.com\/TomasVotruba\/type-coverage\" target=\"_blank\" rel=\"noopener\">TomasVotruba\/type-coverage<\/a> \u2013 PHPStan extension to require minimal type-coverage. See <a href=\"https:\/\/tomasvotruba.com\/blog\/how-adding-type-declarations-makes-your-code-dangerous\" target=\"_blank\" rel=\"noopener\">&#8220;How adding Type Declarations makes Your Code Dangerous&#8221;<\/a> to learn more about it.\n    <\/li>\n<li><a href=\"https:\/\/github.com\/ProjektGopher\/whisky\" target=\"_blank\" rel=\"noopener\">ProjektGopher\/whisky<\/a> \u2013 A CLI tool for managing and enforcing Git hooks across an entire team.\n    <\/li>\n<li><a href=\"https:\/\/github.com\/tomloprod\/colority\" target=\"_blank\" rel=\"noopener\">tomloprod\/colority<\/a> \u2013 A lightweight PHP library designed to handle color transformations, validations and manipulations with ease.\n    <\/li>\n<li><a href=\"https:\/\/infection.github.io\/guide\/custom-mutators.html\" target=\"_blank\" rel=\"noopener\">Infection PHP<\/a> \u2013 The resent update of the mutation testing framework allows writing your own <a href=\"https:\/\/infection.github.io\/guide\/custom-mutators.html\" target=\"_blank\" rel=\"noopener\">Custom Mutators<\/a>.\n    <\/li>\n<li><a href=\"https:\/\/github.com\/dshafik\/bag\" target=\"_blank\" rel=\"noopener\">dshafik\/bag<\/a> \u2013 Immutable value objects for PHP.\n    <\/li>\n<li><a href=\"https:\/\/github.com\/IonBazan\/composer-diff\" target=\"_blank\" rel=\"noopener\">IonBazan\/composer-diff<\/a> \u2013 Compares <code>composer.lock<\/code> changes and generates a markdown report so you can use it in PR description.\n    <\/li>\n<li><a href=\"https:\/\/github.com\/dolthub\/dolt\" target=\"_blank\" rel=\"noopener\">dolthub\/dolt<\/a> \u2013 An SQL database that you can fork, clone, branch, merge, push and pull just like a Git repository. Build with Golang but could be handy for dev environments on PHP.\n    <\/li>\n<\/ul>\n<h2 id=\"symfony\">Symfony<\/h2>\n<ul>\n<li>New in Symfony 7.1 series by Javier Eguiluz:\n<ul>\n<li><a href=\"https:\/\/symfony.com\/blog\/new-in-symfony-7-1-typeinfo-component\" target=\"_blank\" rel=\"noopener\">TypeInfo Component<\/a><\/li>\n<li><a href=\"https:\/\/symfony.com\/blog\/new-in-symfony-7-1-webprofiler-improvements\" target=\"_blank\" rel=\"noopener\">WebProfiler Improvements<\/a><\/li>\n<li><a href=\"https:\/\/symfony.com\/blog\/new-in-symfony-7-1-mapuploadedfile-attribute\" target=\"_blank\" rel=\"noopener\">MapUploadedFile Attribute<\/a><\/li>\n<li><a href=\"https:\/\/symfony.com\/blog\/new-in-symfony-7-1-improved-access-token-authenticator\" target=\"_blank\" rel=\"noopener\">Improved Access Token Authenticator<\/a><\/li>\n<li><a href=\"https:\/\/symfony.com\/blog\/new-in-symfony-7-1-mapped-route-parameters\" target=\"_blank\" rel=\"noopener\">Mapped Route Parameters<\/a><\/li>\n<li><a href=\"https:\/\/symfony.com\/blog\/new-in-symfony-7-1-posix-signals-improvements\" target=\"_blank\" rel=\"noopener\">POSIX Signals Improvements<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"https:\/\/dev.to\/sensiolabs\/how-to-share-your-twigcomponent-with-your-team--54b4\" target=\"_blank\" rel=\"noopener\">How to share your TwigComponent with your team?<\/a> by Matheo Daninos.\n    <\/li>\n<li><a href=\"https:\/\/soyuka.me\/api-platform-3.3\/\" target=\"_blank\" rel=\"noopener\">API Platform 3.3<\/a> by Antoine Bluchet.\n    <\/li>\n<\/ul>\n<h2 id=\"laravel\">Laravel<\/h2>\n<ul>\n<li><a href=\"https:\/\/github.com\/ijpatricio\/mingle\" target=\"_blank\" rel=\"noopener\">ijpatricio\/mingle<\/a> \u2013 Use JS components with Vue or React in a Laravel Livewire and\/or Filament application.\n    <\/li>\n<li><a href=\"https:\/\/laravel-news.com\/frankenphp-octane-out-of-beta\" target=\"_blank\" rel=\"noopener\">FrankenPHP Support in Laravel Octane is Out of Beta<\/a> by Paul Redmond.\n    <\/li>\n<li><a href=\"https:\/\/ryangjchandler.co.uk\/posts\/fun-with-blade-directives\" target=\"_blank\" rel=\"noopener\">Fun with Blade directives<\/a> by Ryan Chandler.\n    <\/li>\n<li><a href=\"https:\/\/ashallendesign.co.uk\/blog\/encrypting-queued-classes-in-laravel\" target=\"_blank\" rel=\"noopener\">Encrypting Queued Jobs, Notifications, Mail, and Listeners in Laravel<\/a> by Ashley Allen.\n    <\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=Fuz-jLIo2g8\" target=\"_blank\" rel=\"noopener\">You don&#8217;t need a frontend framework<\/a> by Andrew Schmelyun.\n    <\/li>\n<li><a href=\"https:\/\/larapackages.com\/\" target=\"_blank\" rel=\"noopener\">LaraPackages.com<\/a> \u2013 A handy catalogue of useful Laravel tools.\n    <\/li>\n<\/ul>\n<h2 id=\"other-frameworks\">Other Frameworks<\/h2>\n<ul>\n<li><a href=\"https:\/\/github.com\/yiisoft\/yii2\/blob\/2.0.50\/framework\/CHANGELOG.md#2050-may-30-2024\" target=\"_blank\" rel=\"noopener\">Yii 2.0.50<\/a> released \u2013 It includes some minor improvements, and the minimum PHP version is raised to 7.3.\n<\/li>\n<\/ul>\n<h2 id=\"phpstorm\">PhpStorm<\/h2>\n<ul>\n<li><a href=\"https:\/\/blog.jetbrains.com\/phpstorm\/2024\/05\/phpstorm-2024-1-early-access-program-is-now-open-2\/\">PhpStorm 2024.2 Early Access Program Is Now Open<\/a><br \/>\n        The upcoming version of PhpStorm will include support for PER Coding Style, a brand-new refactoring floating toolbar, terminal autocompletion for popular PHP tools, and much more.<\/p>\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\">\n<p lang=\"en\" dir=\"ltr\">I&#39;m so excited about this one: <a href=\"https:\/\/twitter.com\/phpstorm?ref_src=twsrc%5Etfw\" target=\"_blank\" rel=\"noopener\">@phpstorm<\/a> will soon have terminal autocompletion for <a href=\"https:\/\/twitter.com\/laravelphp?ref_src=twsrc%5Etfw\" target=\"_blank\" rel=\"noopener\">@laravelphp<\/a>, <a href=\"https:\/\/twitter.com\/symfony?ref_src=twsrc%5Etfw\" target=\"_blank\" rel=\"noopener\">@symfony<\/a>, <a href=\"https:\/\/twitter.com\/packagist?ref_src=twsrc%5Etfw\" target=\"_blank\" rel=\"noopener\">@packagist<\/a> composer, <a href=\"https:\/\/twitter.com\/phpstan?ref_src=twsrc%5Etfw\" target=\"_blank\" rel=\"noopener\">@phpstan<\/a> and <a href=\"https:\/\/twitter.com\/psalmphp?ref_src=twsrc%5Etfw\" target=\"_blank\" rel=\"noopener\">@psalmphp<\/a> ? <a href=\"https:\/\/t.co\/4jAhiY886V\" target=\"_blank\">pic.twitter.com\/4jAhiY886V<\/a>&mdash; Brent (@brendt_gd) <a href=\"https:\/\/twitter.com\/brendt_gd\/status\/1795354588901765361?ref_src=twsrc%5Etfw\" target=\"_blank\" rel=\"noopener\">May 28, 2024<\/a><\/p>\n<\/blockquote>\n<\/li>\n<\/ul>\n<h2 id=\"misc\">Misc<\/h2>\n<ul>\n<li>All <a href=\"https:\/\/php-changed-behaviors.readthedocs.io\/en\/latest\/phpversionindex.html#\" target=\"_blank\" rel=\"noopener\">PHP Changed Behaviors<\/a> grouped by PHP Versions.\n    <\/li>\n<li><a href=\"https:\/\/tideways.com\/profiler\/blog\/properly-restart-opcache-after-deployment\" target=\"_blank\" rel=\"noopener\">Properly restart Opcache after deployment<\/a> by Benjamin Eberlei.<br \/>\n        Check these tools that can help you manage OPcache:<br \/>\n        <a href=\"https:\/\/github.com\/sanderdlm\/chop\" target=\"_blank\" rel=\"noopener\">sanderdlm\/chop<\/a>, <a href=\"https:\/\/github.com\/gordalina\/cachetool\" target=\"_blank\" rel=\"noopener\">gordalina\/cachetool<\/a>\n    <\/li>\n<li><a href=\"https:\/\/mateusguimaraes.com\/posts\/optimizing-php-applications-for-performance\" target=\"_blank\" rel=\"noopener\">Optimizing PHP applications for performance<\/a> by Mateus Guimar\u00e3es.\n    <\/li>\n<li><a href=\"https:\/\/lukapeharda.com\/article\/refactoring-optional-method-params\/\" target=\"_blank\" rel=\"noopener\">How to Refactor a Method With Optional Params<\/a> by Luka Peharda.\n    <\/li>\n<li><a href=\"https:\/\/acairns.co.uk\/posts\/primitive-obsession\" target=\"_blank\" rel=\"noopener\">Primitive Obsession<\/a> \u2013 Why it\u2019s better to use ValueObjects instead of <code>bool<\/code>, <code>int<\/code>, <code>string<\/code>, <code>float<\/code>, <code>array<\/code>.\n    <\/li>\n<li><a href=\"https:\/\/martinjoo.dev\/database-indexing-in-theory\" target=\"_blank\" rel=\"noopener\">Database Indexing in Theory<\/a> by Martin Joo.\n    <\/li>\n<li><a href=\"https:\/\/stitcher.io\/blog\/tagged-singletons\" target=\"_blank\" rel=\"noopener\">Tagged Singletons<\/a> by Brent Roose.\n    <\/li>\n<li><a href=\"https:\/\/hakanaktas.com.tr\/2024-05-11-i-write-my-code-in-controller\" target=\"_blank\" rel=\"noopener\">I write my code in the controller<\/a> by Hakan Akta\u015f.\n    <\/li>\n<li><a href=\"https:\/\/gist.github.com\/ollieread\/273cf344503533ee4c497ab4c62929bf\" target=\"_blank\" rel=\"noopener\">What is covariance and contravariance in PHP<\/a> by Oliver Read.\n    <\/li>\n<li><a href=\"https:\/\/www.ambionics.io\/blog\/iconv-cve-2024-2961-p1#were-hiring\" target=\"_blank\" rel=\"noopener\">Iconv, set the charset to RCE: Exploiting the glibc to hack the PHP engine (part 1)<\/a>.\n    <\/li>\n<\/ul>\n<h2 id=\"conferences\">Conferences<\/h2>\n<p>These PHP events are all worth a visit, and some are still accepting presentation proposals:<\/p>\n<ul>\n<li><a href=\"https:\/\/phpcamp.org\/\" target=\"_blank\" rel=\"noopener\">PHPCamp<\/a> \u2013 Pune, India, June 8.<\/li>\n<li><a href=\"https:\/\/summit.phpers.pl\/en\/call-for-papers\" target=\"_blank\" rel=\"noopener\">PHPers Summit<\/a> \u2013 Pozna\u0144, Poland, June 21.<\/li>\n<li><a href=\"https:\/\/cakefest.org\/\" target=\"_blank\" rel=\"noopener\">CakeFest<\/a> \u2013 Luxembourg, July 24\u201326.<\/li>\n<li><a href=\"https:\/\/laracon.us\/\" target=\"_blank\" rel=\"noopener\">Laracon 2024<\/a> \u2013 Dallas, TX, USA, August 27\u201328.<\/li>\n<li><a href=\"https:\/\/2024.phpsrbija.rs\/\" target=\"_blank\" rel=\"noopener\">PHP Serbia 2024<\/a> \u2013 Belgrade, Serbia, September 6-7. <a href=\"https:\/\/2024.phpsrbija.rs\/cfp#phpserbia2024\" target=\"_blank\" rel=\"noopener\">CFP<\/a> ?<\/li>\n<li><a href=\"https:\/\/2024.phpcon.pl\/en\/\" target=\"_blank\" rel=\"noopener\">PHPCon Poland 2024<\/a> \u2013 Wis\u0142a, Poland, October 25\u201326. <a href=\"https:\/\/cfp-en.phpcon.pl\/\" target=\"_blank\" rel=\"noopener\">CFP<\/a> ?<\/li>\n<li><a href=\"https:\/\/laracon.au\/\" target=\"_blank\" rel=\"noopener\">Laracon AU<\/a> \u2013 Brisbane, Australia, November 7\u20138.<\/li>\n<li><a href=\"https:\/\/live.symfony.com\/2024-vienna-con\/\" target=\"_blank\" rel=\"noopener\">SymfonyCon 2024<\/a> \u2013 Vienna, Austria, December 5\u20136. <a href=\"https:\/\/live.symfony.com\/2024-vienna-con\/cfp\" target=\"_blank\" rel=\"noopener\">CFP<\/a> ?<\/li>\n<\/ul>\n<h2 id=\"fun\">Fun<\/h2>\n<ul>\n<li>\n        <img decoding=\"async\" src=\"https:\/\/pbs.twimg.com\/media\/GNy9TQhakAM0IOB?format=jpg&#038;name=900x900\" width=\"450\" alt=\"\" \/> <a href=\"https:\/\/x.com\/joshcirre\/status\/1791514894812221629\" target=\"_blank\">https:\/\/x.com\/joshcirre\/status\/1791514894812221629<\/a>\n    <\/li>\n<\/ul>\n<p>If you\u2019re wondering when the next PHP meetup is happening near you, check out <a href=\"https:\/\/www.php.net\/cal.php?cm=06&#038;cy=2024\" target=\"_blank\" rel=\"noopener\">the calendar on php.net<\/a>.<\/p>\n<hr>\n<p>    If you have any interesting or useful links to share via PHP Annotated, please leave a comment on this post or let us know <a href=\"https:\/\/twitter.com\/pronskiy\" target=\"_blank\" rel=\"noopener\">on X<\/a> (formerly Twitter).<\/p>\n<p style=\"text-align: left;\" align=\"center\"><a style=\"color: white\" 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>    <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>Developer Advocate at <a href=\"https:\/\/twitter.com\/PhpStorm\" target=\"_blank\" rel=\"noopener\">@PhpStorm<\/a>, Operations Manager at <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","protected":false},"author":869,"featured_media":480192,"comment_status":"closed","ping_status":"closed","template":"","categories":[],"tags":[2213,190,8111,8504,2323,2648,191],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/phpstorm\/480174"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/phpstorm"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/types\/phpstorm"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/users\/869"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/comments?post=480174"}],"version-history":[{"count":11,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/phpstorm\/480174\/revisions"}],"predecessor-version":[{"id":497797,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/phpstorm\/480174\/revisions\/497797"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/media\/480192"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/media?parent=480174"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/categories?post=480174"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/tags?post=480174"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/cross-post-tag?post=480174"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}