The engine rejects a union containing the same type twice, and the check happens at compile time without loading any classes, so two aliases for one class pass.…
Scanning four hundred classes for attributes took 2.9 seconds, which is fine once at deploy and unacceptable on every request. Compiling the reflection result to a plain PHP…
Any class with __toString satisfies Stringable automatically in 8.0, and declaring it explicitly is still the better choice. The automatic satisfaction exists so the type is useful against…
Attributes are stored as a name and a list of arguments and nothing constructs them until reflection asks, which makes them cheap and makes the validation later than…
Promoted properties are assigned before the constructor body runs, so validation in the body reads either the parameter or the property and gets the same value. Mixing promoted…
40ms becomes 8ms, and the fourth request returns another customer’s data. The shared-nothing assumption is load-bearing in more places than anybody had counted.
A fluent method returning self tells the analyser the base class, so every chained call on a subclass loses its type after the first link. static as a…
iterable accepts an array or a Traversable, and only one of those can be counted without consuming it. A generator has no length until it has finished, which…