Announcing PHPenomenal

I spent part of the week building a test application, so I could finally try the new features in PHP 8.6. Partial function application was the standout. clamp() is a genuinely useful addition too.

Trying the new PHP 8.6 features
Part of the week spent on a test application, to see what partial function application and clamp() actually feel like.
x.com

That post is where this started. Damien Seguy and I got chatting, and PHPenomenal came out of the conversation. PHP 8.6 lands on 19 November 2026. The changelog is already public: partial function application, clamp(), a Time\Duration class, #[\Override] on constants, writes on objects held in a constant, readonly properties with a default, and a SortDirection enum. Reading that list is one thing. Using the features in a program that runs is another. The brief is to build a thing, in PHP 8.6, and show the source.

PHPenomenal 8.6
A challenge to write something useful with the features landing in PHP 8.6.
exakat.io

Build a thing

The deadline is midnight UTC on 19 November 2026. That is the moment PHP 8.6 officially exists.

There is no tight definition of useful. The application has to run, take some input, and produce some output, on a single machine, in a sensible amount of time. Fizz-buzz counts. A program that echoes its arguments counts. You can pull in Composer, write tests, run static analysis, and go completely overboard. Just keep it on one machine. Nobody needs a downloaded dataset to clamp() an integer.

The point is to get the features into an editor before they ship, and to see what other people make of them whilst they are still new.

The features

Every entry is expected to touch this set:

  • Partial function application
  • Time\Duration
  • clamp()
  • #[\Override] on a constant
  • Writes on const-held objects
  • Readonly property defaults
  • SortDirection

There is a second list if you want to go further, and it is allowed to grow as people notice more of what 8.6 changed: the polling API, trim() stripping form feeds, the new stream error handling, doc comments on function parameters, and __debugInfo() on enums. Deprecations do not need inventing. If something is on the way out, just avoid introducing it.

PHP.Watch has the full changelog if you want it without the contest rules. The rules themselves are in the repo README.

How to enter

Open a pull request on the repo. Say what you are building, include a README, and update the PR as the thing takes shape. A second idea can be a second pull request. Looking at what other people have opened, and leaving a comment when something is clever or broken, is part of it.

dseguy/phpenomenal
Write PHP 8.6 before it arrives.
github.com

The source has to lint under PHP 8.6. Linting under 8.5 is not required, and for some of these features it will not even parse. Pre-release builds are on php.net, including Windows binaries. Docker images are available. On a Mac, shivammathur/homebrew-php is the straightforward route.

The repo includes scripts/check-php86-features.php. It is not a string search. It tokenises the file with PhpToken::tokenize(), so a feature name sitting in a comment or a string does not count as used. Point it at your file and it reports what it found, where, and what is still missing.

Damien and I are both on the repo, and on the PHP Community Discord.

There is an example in the repo already: Stampede, a short terminal horse race whose runners are named after the new features, and whose code actually uses them. I’m on the board, so it doesn’t count.

Every release

Damien and I would like this to become a regular thing: a PHPenomenal for each PHP release. Same shape each time. Here are the features that are about to land. Show us a thing that actually uses them, before release day, whilst there is still no settled way to write them. If 8.6 goes well, the one after gets a contest too.

Midnight UTC on 19 November 2026. The repo is github.com/dseguy/phpenomenal. Open a pull request.