Excellent PHP writing, hand-picked.
No buzzwords. No ads. No nonsense. Curated by Stefan Priebsch and Sebastian Bergmann of thePHP.cc as a free service to the PHP community.

View all issues →

Issue #17

The cost of getting things right

13 October 2026

"Getting things right takes work that is easy to overlook. Packagist needs sustained care and funding, while accurate arithmetic starts with understanding how PHP stores numbers. PHPStan’s latest release shows the engineering it takes to make precise checks fast enough for everyday use"
— Stefan & Sebastian

blog.packagist.com

Fifteen years of Packagist

Jordi Boggiano and Nils Adermann look back on fifteen years of Packagist.org, which has now served more than 200 billion package installs. They tell how Composer and Packagist came out of the needs of phpBB and Symfony. They also explain why the companies that build on the registry need to help fund it.

Picked by Stefan Priebsch and Sebastian Bergmann – "Composer and Packagist are part of nearly every PHP project, and keeping them running and secure is demanding work that most of us never see. Jordi and Nils have carried it for fifteen years, and it is time for the PHP community to share the load."

thephp.foundation

Getting arithmetic right in PHP

The author explains why 0.1 + 0.2 is not exactly 0.3, and why in PHP an integer that grows beyond PHP_INT_MAX silently becomes a float and loses precision. The article explains the reasons behind these precision problems and how to handle them. A tolerance can be enough for comparisons, while BCMath or GMP can give exact results if the values are passed as strings before any precision is lost.

Picked by Stefan Priebsch – "Many developers know that floats are imprecise, but fewer know that PHP's integers become floats when they overflow. An exact result depends on choosing the right representation before the calculation begins."

phpstan.org

PHPStan 2.3 is much faster

Ondřej Mirtes presents PHPStan 2.3, which analyzes the source code of WordPress in 8 seconds on his machine, where it needed 60 seconds at the end of 2025. Much of the gain comes from PHPStan Turbo, an extension written in C++ that most users get automatically. A rewrite of the analysis engine made the release faster, too, and it enabled new features such as better type inference for generics and the detection of unused variables.

Picked by Sebastian Bergmann – "When static analysis finishes in seconds, developers run it more often and agents can deliver results faster. Ondřej's work this year has improved not only PHPStan's performance, but also its precision."

Issue #16

The structures behind the software

14 July 2026

"Software is shaped not only by the code we write, but by the structures around it: how people find their way into a project, how deeply we understand existing implementations, and what guarantees our infrastructure provides. This issue examines how the PHP ecosystem is organizing its continued development."
— Stefan & Sebastian

ben.ramsey.dev

Who do I talk to?

PHP has people eager to contribute, but it does not always give them a clear place to begin. Ben Ramsey proposes chartered working groups that make responsibilities, membership, communication, and decision-making explicit without introducing a new hierarchy.

Picked by Stefan Priebsch – "PHP does not lack people willing to contribute; it lacks visible paths into the work. Ben's proposal is an interesting starting point for further discussion."

scherzer.dev

Rewriting reflection with Rust

Daniel Scherzer rewrote PHP's Reflection extension in Rust as a learning exercise. Examining the existing implementation line by line uncovered an eighteen-year-old bug, missing type validation, documentation errors, and opportunities to simplify and optimize the C code.

Picked by Sebastian Bergmann – "A rewrite can be valuable even when it is never intended to replace the original. Daniel's experiment produced a deeper understanding of the current implementation."

blog.packagist.com

Immutable versions on Packagist

Packagist has made stable version metadata immutable. Once a version has been published, the Git reference behind it can no longer be silently changed, while deleted versions remain visible with an explanation and actions such as blocked retags are recorded in a transparency log.

Picked by Stefan Priebsch and Sebastian Bergmann – "A version number must identify one body of code, forever. Making stable versions immutable removes ambiguity for users, tools, and security processes."

Issue #15

Staying in control

7 July 2026

"This issue features a library rebuilt by its maintainer after 25 years, a static analysis tool ported to Rust by an LLM, and a coding agent locked into a sandbox. Different stories, one common thread: no matter how our tools change, we developers stay in control."
— Stefan & Sebastian

tecnick.com

Rebuilding TCPDF after 25 years

Nicola Asuni looks back on the history of TCPDF, the PDF generation library that started as a workaround in an e-commerce project and ended up many software projects. Instead of continuing to patch the code, he has rebuilt everything from scratch.

Picked by Stefan Priebsch – “Few maintainers get to reflect on a quarter century of one library. Nicola Asuni has many years on a library that much of the PHP world depends on, and he is not done yet. That kind of dedication deserves our gratitude and support.”

mattbrown.dev

Trying to port Psalm to Rust

Matt Brown, the original creator of Psalm, wanted to know whether an LLM could port his static analysis tool to Rust. It could, mostly: after months of iteration and a hefty token bill, Pzoom runs ten times faster than Psalm and passes almost the entire test suite.

Picked by Sebastian Bergmann – “Matt writes honestly about what the LLM got right and where he had to step in himself. Without Psalm's test suite, this rewrite would have been a gamble.”

einenlum.com

Running coding agents in a sandbox

How can we let coding agents work autonomously, but without giving it full access to our machine? The author of this article locks the agent into a sandbox and shows step by step how to get a PHP project, database included, working inside it.

Picked by Stefan Priebsch and Sebastian Bergmann – "No matter how capable coding agents become, one thing must not change: we are in charge of our own machines. Using a sandbox helps us to keep it that way."