Re: Disable autovivification on false
| From: | Dusk | Date: | Tue, 25 May 2021 20:27:50 +0000 |
| Subject: | Re: Disable autovivification on false | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-114601@lists.php.net to get a copy of this message | ||
On May 25, 2021, at 09:23, Kamil Tekiela <tekiela246@gmail.com> wrote:
> I'd like to start a discussion on the following RFC
> https://wiki.php.net/rfc/autovivification_false
> Particularly, I am looking for opinions on whether this behaviour should be
> left alone, should be disabled on false, or should be disabled on null and
> false, and left only for undefined variables.
It seems to me there are two different sorts of autovivification which can happen. (They may
actually be the same thing under the hood, but they feel different to me.)
One is autovivification within an array, e.g.
$x = ["b" => null, "c" => false];
$x["a"][] = 1; // from unset
$x["b"][] = 2; // from null
$x["c"][] = 3; // from false
The other is autovivification on values outside arrays, e.g.
$b = null; $c = false; $d = new stdClass();
$a[] = 1; // from unset
$b[] = 2; // from null
$c[] = 3; // from false
$obj->a[] = 4; // from unset on an object property, same idea
(The same behavior occurs in each case if an explicit key is used instead of [].)
From my perspective, the latter is much more concerning than the former. Adding dimensions to an
existing array feels like less of a type-correctness violation than calling an entire array into
existence where a non-array value (or no value at all) existed before.