Retourner plusieurs valeurs avec une fonction
By Geoffrey on Sunday 4 January 2004, 16:29 - Coding - Permalink
Peut-être avez vous déjà eu besoin de retourner plusieurs valeurs a l'aide d'une seule fonction. Ou peut-être pas. Toujours est-il qu'on me l'a déjà demandé, c'est donc que ce n'est pas aussi idiot que ça pourrait l'etre au premier abord. Idiot ? Disons insensé. En effet, c'est dans la nature même d'une fonction que de ne renvoyer qu'une seule valeur, fut-elle un array. Et puis de toute façon, comment pourrait on faire ? $var1,$var2 = foo(); ? Mouais bof.
La petite astuce suivante va nous permettre d'effectuer ceci avec un peu plus de classe et de style. Elle est basée sur des arguments passés par références. Asseyez vous, attachez vos ceintures, ça commence, c'est court, mais c'est intense.
Bon, imaginons une fonction qui retourne une position en 3 dimensions: x, y et z. On pourrait imaginer renvoyer un array du genre $pos = array('x' => '0', 'y' => '0', 'z' => 0);. Oui on pourrait. Mais quel interet aurait ce billet alors ? Donc non, on ne fera pas comme ça :) Voyons plutot la fonction suivante:
function get_position(&$x, &$y, &$z) $x = get_x_position(); $y = get_y_position(); $z = get_z_position(); }
Oh Magie des références. Imaginons encore un petit peu que nous ayons déjà la position de l'objet (fusse-t-il une saucisse, un paillasson ou même une soucoupe volante) dans les variables $pos_x, $pos_y, $pos_z. Pour mettre ces valeurs à jour, il suffit d'un appel à get_position comme ceci:
get_position($pos_x, $pos_y, $pox_z);
Et voilou ! Grâce au passage par référence, nos variables sont directement modifiés dans l'espace de nommage global ! Bon bien entendu, cet exemple est trivial. Il aurait effectivement mieux valu renvoyer un tableau, mais bon voilà quoi, c'était pour l'exemple.
Comments
Qu'il est fort