Initializing properties in PHP
PHP 7.4 introduced a new feature called "typed properties" which adds the existing PHP type system to class properties. This means that you can now enforce which types a property has without having to encapsulate it in an object.
Typed properties are a very useful feature, however, typed properties without a default value have a new state: uninitialized
. And if they're accessed before being initialised, you'll run into a Typed property must not be accessed before initialization
error.
So the correct answer to OPs question if you're using PHP 7.4+ is yes, it does matter whether or not you explicitly initialise your class variables and the following two lines are not equivalent any more:
protected int $_foo = null;
protected int $_foo; // The default value in PHP 7.4+ is now uninitialized, not NULL
Further reading (no relation): https://madewithlove.com/typed-property-must-not-be-accessed-before-initialization/
Properties are implicitly initialized to NULL
, there is no advantage to do this explicitly.
is omission of a null initialization value completely functionally equivalent to inclusion of a null initialization?
yes
initialization to an empty array seems like similar situation
no. You can try foreach ($this->arr)
(or something else) and that variable should be initialized with array to avoid notice.
Yes,
protected $_foo = null;
protected $_foo;
are completely equivalents.
As for me great choise is
- initialize clearly by
null
, if it willnull
by default - don't initialize, if it will be overriden in constructor
It helps you to see default values quickly, helps code be self-documenting
Don't initialize array by array()
seems to be bad idea because you can't use some function (ex. array_push
, array_map
)