9 votes

Passer par référence ou renvoyer un tableau en PHP?

Toutes mes fonctions qui ont plusieurs paramètres et qui ont besoin de retourner plus d'une de ces valeurs, je retourne un array comme ceci...

function eg($a, $b) {
    $a += 5;
    $b += 10;
    return array('a' => $a, 'b' => $b);
}
$no = eg(0, 5);
echo $no['a']; // 5
echo $no['b']; // 10

Est-ce considéré comme une mauvaise pratique par rapport au passage par référence c'est-à-dire;

function eg(&$a, &$b) {
    $a += 5;
    $b += 10;
}  
eg(0, 5);
echo $a; // 5
echo $b; // 10

Cela a-t-il vraiment de l'importance? Quand voudrais-je utiliser l'un plutôt que l'autre en utilisant les exemples ci-dessus? Y a-t-il une différence de performance?

Merci

8voto

drrcknlsn Points 7727

Comme la plupart des commentaires l'ont souligné, la première méthode (retournant un tableau) est plus propre et plus facile à comprendre, donc selon ce critère, elle est "meilleure".

Cependant, en fonction de votre cas d'utilisation, il peut même être préférable de ne pas essayer de retourner plusieurs valeurs du tout. Considérez :

public function getDimensions() {
    return array(
        'width' => $this->_width,
        'height' => $this->_height
    );
}

$dim = $canvas->getDimensions();
echo $dim['width'], ' x ', $dim['height'];

Comparé à :

public function getWidth() {
    return $this->_width;
}

public function getHeight() {
    return $this->_height;
}

echo $canvas->getWidth(), ' x ', $canvas->getHeight();

C'est un exemple fabriqué, évidemment, mais imaginez que vos méthodes font quelque chose de coûteux au lieu de futile. Maintenant, imaginez que vous n'ayez besoin que de la première des valeurs, mais comme votre méthode calcule toutes pour chaque invocation, vous devez calculer inutilement tout et jeter ce dont vous n'aviez pas besoin.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X