Ver Mensaje Individual
  #8 (permalink)  
Antiguo 23/08/2015, 10:10
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años
Puntos: 320
Respuesta: Corregir/mejorar mi código

El ampersand sirve para crear una referencia a una variable, no es exactamente lo mismo, pero se lo puede comparar con los llamados punteros en otros lenguajes, lo que que hace la referencia no es copiar el contenido de una variable sino hacer referencia al contenido de otra:
Código PHP:
Ver original
  1. foreach($params as &$param) {
En esta linea lo que dice es que en cada interacción del loop, $param va a ser una referencia de la posición, no una copia del valor de la posicion, sino una referencia a ese valor, por lo que cuando cambie el valor de esa posicion del array, tambien cambiara el valor de $param (solo para que se entienda la idea, en realidad $param no tiene valor propio)
Código PHP:
Ver original
  1. $bind_params[] = &$param;
En este caso, lo que se esta haciendo es crear una referencia a una referencia, porque $param ya es una referencia en si misma, el resultado es que $bind_params contiene en el primer lugar el string con los tipos y luego una serie de referencias a los elementos de $params.
¿Para que?
Imaginate que tienes que repetir varias veces la misma accion, tienes que insertar 10 clientes, la sentencia se prepara solo una vez y luego solo se modifican los parametros ej:
Código PHP:
Ver original
  1. require("DbTable.php");
  2. try {
  3.     $usuarios = new DbTable("usuarios");
  4.     $usuarios->props["cliente"] = "Manolito";
  5.     $usuarios->props["email"] = "[email protected]";
  6.     $usuarios->props["password"] = "1234";
  7.     $usuarios->props["edad"] = 22;
  8.  
  9.     echo "Se inserto el registro: ".$insert->insert();
  10.     $usuarios->props["cliente"] = "Alberto";
  11.     echo "Se inserto el registro: ".$insert->insert();
  12.     $usuarios->props["cliente"] = "Jose";
  13.     echo "Se inserto el registro: ".$insert->insert();
  14.     $usuarios->props["cliente"] = "Pedro";
  15.     echo "Se inserto el registro: ".$insert->insert();
  16.     $usuarios->props["cliente"] = "Martin";
  17.     echo "Se inserto el registro: ".$insert->insert();
  18. } catch(Exception $e) {
  19.     echo "Error: " . $e->getMessage();
  20.     exit();
  21. }

Ese codigo reutiliza la sentencia preparada solo cambiando los valores, eso es posible porque los parametros vinculados a la sentencia son referencias a la propiedad $props, por lo que cuando esta propiedad se modifica, tambien lo hacen los valores de la sentencia (nuevamente, es a modo de ejemplo, la sentencia en realidad no tiene valores)
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios