2012-02-08 10 views
6

Todos mis funciones que tienen varios parámetros y que deben devolver más de uno de esos valores devuelvo un array así ...¿Pasa por referencia o matriz de retorno en PHP?

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 

¿Esto se considera una mala práctica en comparación con pasar por el, valor de referencia;

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

¿Esto realmente importa? ¿Cuándo querría usar uno sobre el otro cuando utilice los ejemplos anteriores? ¿Hay alguna diferencia en el rendimiento?

Gracias

+0

Como esta es la opinión, esta pregunta probablemente no es perfecta para este foro, pero personalmente diría que su ejemplo anterior es probablemente más limpio y hecho mejor que pasar por referencia, que es un poco flojo y si su código está bien encapsulado , hace que sea difícil ver al leer por qué sus valores $ a y $ b son repentinamente diferentes. Creo que tu primer ejemplo, personalmente, es el camino a seguir. – DaOgre

+0

Disculpa por la pregunta que me hizo otro miembro de otra pregunta. Gracias por tu comentario. Solo me pregunto si cambiar mi código o no en función de si es buena o mala práctica hacerlo. Pero entiendo que es más fácil entender el primer ejemplo. – cgwebprojects

+0

Sin respuesta afirmativa o negativa, acepto que el primer ejemplo es más claro, y su compañero de trabajo le agradecerá esa claridad. – Wrikken

Respuesta

6

Como la mayoría de los comentarios han señalado, el primer método (volviendo una matriz) es más limpio y más fácil de entender, por lo que por esa métrica, que es "mejor".

Dependiendo de su caso de uso, tal vez sea mejor no intentar devolver varios valores. Considere lo siguiente:

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

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

En comparación con:

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

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

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

Este es un ejemplo artificial, obviamente, pero imagina que sus métodos de hacer algo caro en lugar de frívola. Ahora imagina que solo necesitas el primero del conjunto de valores, pero dado que tu método calcula todos ellos para cada invocación, tienes que calcular todo de forma inútil y descartar lo que no necesitas.

Cuestiones relacionadas