Though this is truly a stylistic complaint, I think it will lead to
harder-to-analyse code.
Currently I have a static analysis tool that can verify (in 99% of cases)
whether all properties of a class have been initialised in the constructor.
This check is even more important in PHP 7.4, where use of a property
without instantiation is a fatal error.
Figuring out which properties have been instantiated in a constructor is
non-trivial, and it's only efficient to do it once per class.
If we adopt this into the language and people use both __construct and
object initializers for a given class, analysis would become much more
tricky.
In order to find the error in this:
abstract class A {
public string $s;
public int $t;
}
class B extends A {
public bool $u;
public function __construct() {
$this->s = "hello";
}
}
$b = new C {
u = true
};
The analyzer needs to understand that the initialisation of B left a
property uninitialised - it warns about it in B's constructor (
https://psalm.dev/r/0e8e40fefc) but I worry that people will start to
dismiss those warnings as false-positives if this pattern becomes popular.
Best wishes,
Matt
On Thu, 12 Sep 2019 at 10:00, Michał Brzuchalski <
[email protected]> wrote:
> Hi internals,
>
> I'd like to open discussion about RFC: Object Initializer.
>
> This proposal reduces boilerplate of object instantiation and properties
> initialization in case of classes without required constructor arguments as
> a single expression with initializer block.
>
> https://wiki.php.net/rfc/object-initializer
>
> I appreciate any feedback you all can provide.
>
> Thanks,
> --
> Michał Brzuchalski
> [email protected]
>