Bonjour,
j'essaie de gagner de la RAM sur un script et il y a quelque chose que je ne comprends pas avec de la copie de références. Je veux stocker des références vers des string dans un tableau plutôt que de stocker la valeur réelle pour réduire la consommation mémoire.
Ce que je ne comprends pas c'est que si je fais :
J'ai bien comme sortie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 $str = "str1"; $array1[] = $str; $array1[] =& $str; echo '<pre>'; var_dump($array1); echo '</pre>';
On peut voir que array1[1] pointe bien vers &$str.array(2) {
[0]=>
string(4) "str1"
[1]=>
&string(4) "str1"
}
En revanche si je fais :
(et c'est ça qui m'intéresse plutôt que le cas 1), j'obtiens :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 $array2[] = "str2"; $array2[] =& $array2[0]; echo '<pre>'; var_dump($array2); echo '</pre>';
En fait, je m'attendais plutôt à avoir ceci :array(2) {
[0]=>
&string(4) "str2"
[1]=>
&string(4) "str2"
}
et j'ai du mal à comprendre ce comportement. Les 2 entrées du tableau semblent pointer vers une référence sur un string anonyme.array(2) {
[0]=>
string(4) "str2"
[1]=>
&string(4) "str2"
}
En tout cas cela semble fonctionner, toutes les entrées du tableau pointent bien vers la même zone mémoire mais le var_dump() me trouble un peu
D'ailleurs, peut-être que cette manip est déjà faite de manière transparente par PHP (à la manière des string immuables en Java) ? Si quelqu'un a des infos sur tout ça
Merci d'avance.
(Par ailleurs, ça fait un moment que je n'avais pas fait de php, si quelqu'un a des infos sur l'obsolescence éventuelle des références, comme cela avait été annoncée il y a plusieurs années... merci ^_^)
Partager