Dereferencing an array in foreach unwraps the reference
Personne n'a encore pris cette issue.
- Langage dominant
- C
- Étoiles
- 40.4k
- Forks
- 8.2k
- Merge moyen
- 2 j 13 h
- PR mergées (30 j)
- 96
Description
Description
The following code (https://3v4l.org/8QBeN):
<?php
$a = [1];
foreach ((isset($a["key"]) ? [&$a["key"]] : [&$a])[0] as &$v) {
var_dump($a);
$v++;
}
var_dump($a);
Resulted in this output:
array(1) {
[0]=>
int(1)
}
array(1) {
[0]=>
int(1)
}
But I expected this output instead:
array(1) {
[0]=>
&int(1)
}
array(1) {
[0]=>
&int(2)
}
In PHP 7.2 and before, the output was as expected. Today it's required to use an explicit variable to preserve the reference.
PHP Version
PHP 7.3.0 - master
Operating System
No response
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par le reproducteur PHP lié dans l’issue et comparez son comportement entre PHP 7.2 et la version PHP 7.3 signalée. Étudiez la manière dont la référence de foreach est gérée lors de l’itération sur l’expression conditionnelle du tableau. Le travail est considéré comme terminé lorsque la référence est conservée et que la sortie correspond au résultat attendu, sans nécessiter de variable temporaire explicite.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- php
- Domaine
- compilers
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100