public const int TIMEOUT_SECONDS = 30; One week old, and the one thing I waited for from PHP 8.3.

Busy November. 8.3 released last week, and yesterday Symfony shipped 6.4 LTS and 7.0 on the same day. Time to plan, not to jump.

Typed class constants are a small thing, but constants were the last untyped island in a class, and a child class could silently redefine one to a different type. Also json_validate(), which checks JSON syntax without building the whole tree in memory. Everyone had a helper that did json_decode and threw the result away. Now the helper can retire.

The Symfony pair is the interesting mechanism. 6.4 and 7.0 are the same code, released together. 6.4 keeps the deprecated paths and runs on PHP 8.1. 7.0 removes everything deprecated and wants 8.2 minimum. So the upgrade plan writes itself and there is no heroism in it. Go to 6.4, turn on deprecation logging, clean your code until the log is silent. Meanwhile raise PHP, 8.3 is fine for both. Then the jump to 7.0 is close to a version bump in composer.json, because a 6.4 codebase without deprecations is a 7.0 codebase.

The blocker, as always, will be third-party bundles. Check their constraints now: anything demanding ^6.0 and not yet allowing ^7.0 goes on a list, and the list goes to the maintainers or gets forked. Better to know in November than in the middle of the migration.

Nothing here needs to happen this week. LTS exists exactly so you can move without hurry. But the deprecation log should start collecting today.

I turned it on this morning. By lunch it was long, and half of it was mine.