Ver Mensaje Individual
  #5 (permalink)  
Antiguo 02/10/2014, 11:46
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años
Puntos: 320
Respuesta: Cuantos RETURNS se puede aplicar?

Si quieres que una funciion retorne varios valores, debes convertirla en una funcion generadora.

Las funciones generadoras no usan return sino yield, es decir, no retornan un unico valor, sino que lanzan retornos a medida que se los solicita, por ejemplo:
Código PHP:
Ver original
  1. <?php
  2. function comprobarCookie($cookie)
  3. {
  4.     $sql_comprobar = "SELECT * FROM users WHERE cookieUser = :cookie and validezCookie >'".date("Y-m-d h:i:s")."'";
  5.     $result = $dbcon->prepare($sql_comprobar);
  6.     $result->bindParam(':cookie' , $cookie, PDO::PARAM_STR);
  7.     $result->execute();
  8.  
  9.     if(!$result || $result->rowCount()<1)
  10.         return; // Matar la funcion.
  11.     else
  12.     {
  13.         $row = $result->fetch();
  14.  
  15.         yield "m_user" => $row["nombreUser"];       // Retornar varias variables.
  16.         yield "m_user_id" => $row["idUser"];        // Retornar varias variables.
  17.         yield "m_user_nick" => $row["nickUser"];    // Retornar varias variables.
  18.         yield "m_user_rol" => $row["rolUser"];      // Retornar varias variables.
  19.     }
  20. }
  21.  
  22. $some_cookie = "some_use";
  23. foreach(comprobarCookie($some_cookie) as $field => $value)
  24.     echo("$field => $value <br>");

Otra forma mas clasica de retornar mas de un valor es mediante un array y la funcion list:
Código PHP:
Ver original
  1. <?php
  2. function comprobarCookie($cookie)
  3. {
  4.     $sql_comprobar = "SELECT * FROM users WHERE cookieUser = :cookie and validezCookie >'".date("Y-m-d h:i:s")."'";
  5.     $result = $dbcon->prepare($sql_comprobar);
  6.     $result->bindParam(':cookie' , $cookie, PDO::PARAM_STR);
  7.     $result->execute();
  8.    
  9.     if(!$result || $result->rowCount()<1)
  10.         return array_fill(0, 4, false);
  11.     else
  12.         return array_values($row = $result->fetch());
  13. }  
  14.  
  15. $some_cookie = "some_use";
  16. list($m_user, $m_user_id, $m_user_nick, $m_user_rol) = comprobarCookie($some_cookie);
  17.  

Y como para cerrar, al igual que en la mayoria de los lenguajes, return mata la ejecucion de una funcion, puedes poner todos los que quieras, pero solo se ejecutara el primero que se encuentre.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios