On 25.01.2017 at 14:21, Giovanni Giacobbi wrote: > Greetings, > > There is something weird with 7.1 and implicit strings to array > conversions, so I wanted to double check with you that the behaviour is > wanted (and perhaps the migration71 doc should be updated to reflect this. > > So in the migration docs [1] you say that: " Applying the empty index > operator to a string (e.g. $str[] = $x) throws a fatal error instead of > converting silently to array. " > > I'm going to show four cases on different PHP versions: > > CASE 1: php -r '$a = "foo"; $a[] = "bar"; var_dump($a);' > PHP 5.6.x -> Fatal Error > PHP 7.0.x -> Fatal Error > PHP 7.1.x -> Fatal Error > > CASE 2: php -r '$a = "foo"; $a["x"] = "baz"; var_dump($a);' > PHP 5.6.x -> string "boo" (with illegal offset warning) > PHP 7.0.x -> string "boo" (with illegal offset warning) > PHP 7.1.x -> string "boo" (with illegal offset warning) > > CASE 3: php -r '$a = ""; $a["x"] = "bar"; var_dump($a);' > PHP 5.6.x -> array("x" => "bar") with NO warnings > PHP 7.0.x -> array("x" => "bar") with NO warnings > PHP 7.1.x -> string "b" with illegal offset warning > > CASE 4: php -r '$a = ""; $a[] = "bar"; var_dump($a);' > PHP 5.6.x -> array("bar") with NO warnings > PHP 7.0.x -> array("bar") with NO warnings > PHP 7.1.x -> Fatal Error > > I think what is bugging me here is that the docs talk about CASE 1 whose > behaviour actually did not change, so it should mention "empty string" > because that's where the actual change happened (CASE 4), also I think that > CASE 3 should be rethinked. > > In general I would like to raise a concern on the fact that I think the > previous behaviour was better, after all PHP is dynamically typed so why > not allow a variable to silently change its value silently? We know that > using offset with strings is always illegal (CASE 2) so why not *always* > converting it to an array and discard its previous value? > > [1] > http://php.net/manual/en/migration71.incompatible.php#migration71.incompatible.empty-string-index-operator
See <https://bugs.php.net/bug.php?id=73925>. -- Christoph M. Becker -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php