Personally there are a few times where I tend to screw up with Composer for PHP the most. At the high level its going to be very obvious that the main reason for these comes from versioning. It's a pain in the ass to say yes my app can use v1, v2, v4, but not v3. Once you leave the small set of packages directly related to Composer itself, very few are sitting there juggling version constraints in the real world. Most version constraints are set expecting "features could ever be removed or broken from this point on" and nothing is ever going to fix that human problem, leaving the [...]
At first this was a feature I was excited for. After using it, I've changed my mind about it. Constructor property promotion was added so that you could pass an argument to a class constructor, and it would get auto assigned to a property, without you having to do $this->That = $That in your constructors over and over.
The main point of attributes is to add metadata to code that is easily parseable and can think for itself when you ask for it. Up to now most devs were probably doing this using the PHP docblock thing - those double star multi-line comments. We'd fill them with @tags and then parse that data with Reflection and probably some regular expressions to make any sense of the blob of text.
For a long time now, and like pretty much every other PHP dev out there, at some point I invented my own Object wrapper around arrays to give them nice OOP interfaces. I am a low level person so implementing my own wrappers is far more entertaining to me than just using one of the 34859 that already exist. Mine ended up in a library called Nether\Object that provides a few utilities for things I found myself doing too often making arrays into objects and maybe even back again.
The class in question though Nether\Object\Datastore is
really just a fancy wrapper to handle arrays without having [...]