PHP 8.2 was released on December 8. My checklist for it looks like every other December, which is the whole point of a yearly cadence.
On the surface a quiet release. Readonly classes, DNF types, standalone true, false and null types, constants in traits. Underneath, the more important half: another round of cleaning old dynamic behavior. Dynamic properties deprecated, ${var} string interpolation deprecated, utf8_encode deprecated. The language keeps trading looseness for predictability, and I keep voting for the trade.
The order. First the deprecation pass: run the test suite on 8.2 with deprecations turned into log lines, and read the log. This is where the dynamic property typos show up, I wrote about them in September. Then the dependency audit, because the blockers are rarely your code. Frameworks were ready early this year, the long tail of small packages was not. Then CI runs both versions for a week or two, and only then production.
On the new features, be lazy. Readonly classes I take immediately: value objects and command DTOs become one keyword shorter and honestly immutable. That is a real improvement to the model of the code.
DNF types I will use maybe twice a year. (Countable&ArrayAccess)|null is precise, and precision at the border of a library is worth it. Inside application code, if a parameter needs a type like that, I first ask why the design produced such a parameter. Usually the type is not the problem.
And do not rewrite anything just to use new syntax. A diff that changes working code for fashion has review cost, merge cost, and zero value. New features earn their place in new code first. The old code will meet them when it changes for its own reasons.
Upgrade the runtime every year. Adopt features when they pay. Two separate decisions, and I mix them up every time I see a new keyword.