PHP Annotated — January 2022

Greetings everyone,
Catch up on the latest from the PHP world with our specially curated news, articles, tools, and videos.

News

The PHP Foundation Update, January 2022
The PHP Foundation started its work at the end of November as a non-profit organization whose mission is to ensure the long life and prosperity of the PHP language.

We already have the first results. Applications for sponsorship from core developers have been received and are being processed.

The foundation team will be publishing monthly updates so you can subscribe to our Twitter @thephpf to stay up to date with the news.

To learn more about The PHP Foundation check out the Voices of the ElePHPant Ep 366 podcast with Joe Watkins, Sara Golemon, and Sebastian Bergmann.

PHP 8.0.15, PHP 8.1.2, PHP 7.4.27
Bug fixes for current PHP branches have been released. In the case of PHP 7.4 this is the last regular release, from now on only security updates will be issued for the PHP 7.4 branch.
PHP version stats: January, 2022
Fresh stats for PHP versions according to packagist.org. Version 8.1 only came out two months ago, but it’s already gained 9.1% share. However, there’s still a lot of PHP 7.4 (44%).

[RFC] User Defined Operator Overloads
A proposal to add operator overloading to PHP failed to pass the vote. You can however listen to the PHP Internals News podcast with the author Jordan LeDoux to learn the details.
Jordan also published very thorough instructions on How to make an RFC for PHP.

In the meantime, operator overloading can already be used in PHP thanks to lisachenko/z-engine and FFI. Here is an example of the implementation of operators for matrices: lisachenko/native-php-matrix.

Releases

thephpleague/flysystem 3.0.0 – A major update of the popular library for working with file systems. Check out the blog post with all the details.
Cycle 2.0 – The second major release of Cycle – DataMapper and ORM for PHP that can be used in both traditional and demonetized PHP applications.
ankitpokhrel/tus-php 1.0 – Server and client implementation of the tus.io, an open protocol for renewable file uploads. The protocol is used, for example, in Vimeo and Cloudflare.
Infection PHP 0.26.0 – An update to the PHP mutation testing framework. The new version adds HTML reports, mutation of only changed strings, and more.
Doctrine ORM 2.11 – The update brings support for enumerations, virtual columns, read-only properties, nested attributes, and more.
Roave/BetterReflection 5.0 – Improved Reflection API: you can get information without loading classes, from closures, and much more. The new version adds support for PHP 8.1 and has better performance.

Tools

viewi/viewi – A powerful tool for creating reactive applications using only PHP and HTML. In essence, it’s a server-side template engine + frontend framework. But the zest is that you describe all components and logic in PHP and then the tool transpiles them into native JS.

The project website viewi.net details the mechanism of operation and has code examples. You can also follow a step-by-step tutorial and check out the Symfony integration.

Roach PHP – A tool for web scraping inspired by the popular Python library, Scrapy.
symfony/html-sanitizer – A new component to clean up untrusted HTML and protect against XSS. It could be a good alternative to HTML Purifier.
EventSaucePHP/ObjectHydrator – Library for hydrating raw data (like JSON) into objects.
ajthinking/archetype – A simple interface for modifying PHP files/classes.
framjet/php-enum-bitmask – Using enumerations from PHP 8.1 as bitmasks.
beyondcode/httpdump – Laravel application for debugging incoming HTTP requests (debugging web hooks, etc.). Creates random URLs and dumps all the requests to them in a nice way. You can see it in action at httpdump.app.
spatie/ignition – The library for displaying debugging error pages, familiar to many from Laravel, but now framework-independent, has been updated and can be used in any application. See the overview blog post.
chevere/xr – A debug server on ReactPHP, inspired by the spatie/ray, but instead of a desktop application it’s just a CLI command to run. Video demo.
JustSteveKing/php-sdk, Sammyjo20/Saloon – Two similar libraries with the same idea: simplify SDK creation for services or organize access to different APIs in the common style.
AliSaleem27/wordle-cl – A CLI version of the popular five-letter word guessing game Wordle.
staabm/phpstan-dba – An extension for PHPStan that checks the validity of SQL queries in PDO, MySQLi, and Doctrine/DBAL. Demo.
flow-php/etl – Extract Transform Load pattern implementation to use in your PHP application. Check out the thread from the author to learn more.

Symfony

The symfony-cli has been open-sourced
In addition to Symfony-specific tasks, the tool includes a local server, which can be used as a modern alternative to MAMP/WAMP. It supports multiple versions of PHP (each project can specify its own), has integration with Docker, local domains, and automatic HTTPS. The tool is implemented in Go, supports Linux, macOS, and Windows.
A better way to quickly start Symfony projects
Introducing the Symfony 6 Certification – 90 minutes for 75 questions from 15 topics.
Organizing your Symfony project tests
The key concepts of Symfony’s Security package in 5 minutes
Symfony Messenger <3 systemd
Use PHP Enums as Doctrine type in Symfony
Build Symfony and Doctrine ORM Applications with ease using Ecotone
norberttech/static-content-generator-bundle – The tool generates static HTML pages from your Symfony application.
Using custom PHP attributes for registering and configuring Symfony Messenger handlers
JSON Columns and Doctrine DBAL 3 Upgrade

Laravel

Laracon Online is on Feb 9, and it’s free
The conference is usually paid, but this Laracon Online Winter will be broadcast free on YouTube.
Building a multi-room chat application with Laravel and Centrifugo
Managing Laravel services
Laravel Pseudo-Daemons
Primitive Types in Controllers and Closure Routes
How to scale Laravel project on AWS without breaking the bank.
LaravelDaily/Laravel-Roadmap-Learning-Path – A systematic collection of materials for learning Laravel from simple to complex.
Building an API using TDD in Laravel
Efficient Pagination Using Deferred Joins
45 New Laravel Tips 2022

Yii

Yii 1.1.25 – The first version of the Yii framework is not actively developed, but compatibility fixes are still coming out. This update fixes a few for PHP 8.0.
The first stable releases for some Yii 3 components have also been released: yiisoft/user, yiisoft/translator-extractor, yiisoft/config, yiisoft/yii-swagger, yiisoft/widget, yiisoft/router.
Yii news 2021, issue 4

Misc

Trying out PHP after 7 years of working with Java.
PHP in 2022 – Brent Roose’s traditional ecosystem overview.
Heaps explained in PHP
Implementation of Chain of Responsibility Design Pattern in PHP
async & await at the edge with ReactPHP – PHP 8.1 with fibers support is out! One of the ReactPHP maintainers writes about how they’re used. In particular, the new ReactAsyncasync and ReactAsyncawait functions have been added.
PHP Benchmark: include() vs file_get_contents() – include() can be faster than file_get_contents() if you tweak the Opcache settings.
Where does my validation live?
How to build maintainable PHP applications and decouple business logic from the frameworks.
Making sense of the 8 log levels in PHP – You’ll most likely only need four.
Overriding vendor classes – If you don’t want to create a fork, you could properly configure autoloading in composer.json. Or as an option, you can also use patches with cweagans/composer-patches.
Accessing private properties in PHP – Instead of reflection and access through Closure::bind you can cast object to array (but should you?).
Sometimes it can be useful to look at the generated opcodes to understand what is going on in the code. The command phpdbg -p* file.php will help.

To better understand how a snippet of #PHP code works internally, you can use `phpdbg -p* file.php` to dump the opcodes.

This is how you debunk #myths like single quotes being faster than double quotes. pic.twitter.com/2YoG9NAc6F

— Patrick Allaert PHP 8.1 RM (@AllaertPatrick) January 4, 2022

Community

Thanks for reading!

If you have any interesting or useful links to share via PHP Annotated, please leave a comment on this post or send me a tweet.

Subscribe to PHP Annotated

Your JetBrains PhpStorm team
The Drive to Develop

<!—->

The PhpStorm Blog : The Lightning-Smart IDE for PHP Programming | The JetBrains Blog
Read More

Latest News

PHP-Releases

PHP 8.0.23 released!

PHP 8.1.10 released!

PHP 7.4.30 released!