"Attempting to set reference to non referenceable value" upon array destructuring by 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:
<?php
$someglobal = 1;
function foo() {
global $someglobal;
return [&$someglobal];
}
list(&$ref) = foo();
++$ref;
var_dump($someglobal);
Resulted in this output:
Notice: Attempting to set reference to non referenceable value in /tmp/preview on line 10
int(1)
But I expected this output instead:
int(2)
Making foo return by reference silences this warning, i.e. this is a valid workaround:
function &foo() {
global $someglobal;
$ref = [&$someglobal];
return $ref;
}
But actually, the array itself should not need to return by reference, if we only desire to access a by-reference value within the array.
On top of this, this simple code:
<?php
[&$a] = [&$b];
emits Fatal error: Cannot assign reference to non referenceable value.
PHP Version
PHP 7.3-8.3
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 reproduire les deux exemples de déstructuration avec PHP 7.3–8.3 et comparez leurs avertissements, leur erreur fatale et leur sortie avec les attentes signalées. C’est terminé lorsque le premier exemple incrémente la valeur globale à int(2) sans émettre la notice et que le second n’émet plus l’erreur fatale d’affectation par référence.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- php
- Domaine
- backend
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100