Uninitialized properties are hard to statically analyze. To prevent mistakes, Psalm will enforce that all properties should be initialized.

It does that through MissingConstructor and this issue.

Psalm will then assume every property in the codebase is initialized.

Doing that allows it to report missing initializations as well as RedundantPropertyInitializationCheck

This issue is emitted when a non-null property without a default value is declared but not set in the class’s constructor

If your project relies on having uninitialized properties, it is advised to suppress this issue, as well as MissingConstructor and RedundantPropertyInitializationCheck.


class A {
    /** @var string */
    public $foo;

    public function __construct() {}