Erreur PHP : Cannot create references to elements of a temporary array expression
L’erreur fatale PHP Cannot create references to elements of a temporary array expression survient par exemple lorsqu’on tente d’assigner une variable par référence au sein d’une boucle foreach alors que le tableau d’entrée est une variable temporaire, c’est à dire générée et interprétée au sein de l’instruction foreach.
La variable n’ayant pas été déclarée et initialisée en dehors de la boucle, l’accès aux références de chaque élément n’est donc pas possible.
Le code ci-dessous illustre un cas de figure où l’erreur survient, notez que les méthodes utilisées sont celles de la classes Active Record du framework CodeIgniter :
1 2 3 4 5 6 7 8 9 |
$q = $this->o_db->get(); // The foreach's source array is created inside the foreach // This way cause the fatal error "Cannot create references to elements of a temporary array expression" foreach($q->result() as &$row) { $row->some_property = 'some_value'; } |
La solution
Il suffit de déclarer le tableau d’entrée de la boucle foreach à l’extérieur de celui-ci :
1 2 3 4 5 6 7 8 9 10 11 12 |
$q = $this->o_db->get(); $result = $q->result(); // The foreach's source array is created outside the foreach // This way allows to assign $row by reference foreach($result as &$row) { $row->some_property = 'some_value'; } |