08-07-2010, 03:51 PM
(08-07-2010, 12:23 PM)wildd a écrit : @sephi, me semble alors que y a un problème avec la fonction compact() de php, parce quelle ne respecte pas tes critères ;-) pareil si tu utilise certaine fonction demandant en input une réf sur un tableau et que tu mets un array() littéral en entrée, ça bug.
C'est assez normal que les fonctions qui prennent des références n'aiment pas.
Après tout, ça ne rime à rien de faire quelque chose comme ce qui suit, donc le passage par référence est bien vu :
sort(array(3, 1, 2)); // Fatal error: Only variables can be passed by reference
On utilisera forcément une variable si on veut le résultat d'un tri.
Bien sûr, dans un langage objet, le problème ne se pose pas puisqu'on utilisera des méthodes sur des objets.
numbers = [ 3, 1, 2 ]
p numbers.sort # => [ 1, 2, 3 ]
p numbers # => [ 3, 1, 2 ]
numbers.sort!
p numbers # => [ 1, 2, 3 ]
La méthode sort ne modifie pas l'objet (elle instancie un nouveau tableau) alors que la méthode sort! le fait (elle modifie le tableau).
En regardant le code source des deux fonctions, on voit d'ailleurs que sort (code source) duplique le tableau avant de le passer à sort!.
En PHP, le tableau donné en entrée est systématiquement modifié.
Sephi-Chan