Possible regression with spreading nested arrays into a function call and references
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- C
- Sterne
- 40.4k
- Forks
- 8.1k
- Ø Merge
- 2 T. 13 Std.
- Gemergte PRs (30 T.)
- 96
Beschreibung
Description
I've noticed the following possible regression:
$args = [1];
$ref = [&$args];
function test(&$v) {
$v = 7;
};
test(...$ref[0]);
var_dump($args[0]);
Starting with PHP 7.3, the output of the above code has changed:
$ docker run --rm php:7.2.34 -r "$args = [1]; $ref = [&$args]; function test(&$v) { $v = 7; }; test(...$ref[0]); var_dump($args[0]);"
int(7)
$ docker run --rm php:7.3 -r "$args = [1]; $ref = [&$args]; function test(&$v) { $v = 7; }; test(...$ref[0]); var_dump($args[0]);"
int(1)
$ docker run --rm php:8.3.7 -r "$args = [1]; $ref = [&$args]; function test(&$v) { $v = 7; }; test(...$ref[0]); var_dump($args[0]);"
int(1)
The only entry I've found within PHP 7.3's release notes that might be related is References returned by Array and Property Accesses are immediately unwrapped. But I'm not sure whether this does actually describe the behavior change in the code snippet above.
I'm also not really sure whether the code is valid or not. In case it is not, it might be helpful to display a message.
There exists a workaround to get the old result by introducing another variable:
$temp = &$ref[0];
test(...$temp);
PHP Version
PHP 7.3.0 - PHP 8.3.7
Operating System
No response
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne damit, das Beispiel zum Spreaden verschachtelter Arrays und von Referenzen unter PHP 7.2, 7.3 und 8.3 zu reproduzieren, und vergleiche es anschließend mit dem Migrationshinweis zum Auflösen von Referenzen in PHP 7.3. Bestimme, ob das geänderte Ergebnis gültig ist; die Aufgabe ist abgeschlossen, wenn die erwartete Semantik dokumentiert und eine Korrektur oder Diagnose hinzugefügt wurde, falls das Verhalten fehlerhaft ist.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- php
- Bereich
- compilers
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 38/100