Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Cuantos RETURNS se puede aplicar?

Estas en el tema de Cuantos RETURNS se puede aplicar? en el foro de PHP en Foros del Web. Buenas, más bien es un pregunta didáctica, y para quitarme la duda, ya que no encuentro una documentación al respecto aún. Suponiendo que tengo una ...
  #1 (permalink)  
Antiguo 01/10/2014, 13:18
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Cuantos RETURNS se puede aplicar?

Buenas, más bien es un pregunta didáctica, y para quitarme la duda, ya que no encuentro una documentación al respecto aún.

Suponiendo que tengo una función X, como la que voy a poner en el ejemplo...
Código PHP:
function comprobarCookie($cookie){

    
$sql_comprobar "SELECT * FROM users WHERE cookieUser = :cookie and validezCookie >'".date("Y-m-d h:i:s")."'";
    
$result $dbcon->prepare($sql_comprobar);
    
$result->bindParam(':cookie' $cookiePDO::PARAM_STR);
    
$result->execute();
    
    if(!
$result || $result->rowCount()<1){
         return 
false;
    }else{
//ESTA ES LA PARTE QUE QUIERO CONSULTARLES
        
$row $result->fetch();
        
$_SESSION["m_user"] = $row["nombreUser"];
        
$_SESSION["m_user_id"] = $row["idUser"];
        
$_SESSION["m_user_nick"] = $row["nickUser"];
        
$_SESSION["m_user_rol"]=$row["rolUser"];

        return 
true;
    }

Se darán cuenta que si cumple con una condicion me devuelve RETURN FALSE, pero si la cumple, mi idea es retornar todos los elementos de SESSION creados.

La pregunta: Es correcto poner solo TRUE para que todos los valores sean retornados, o debo hacerlo uno a uno.. es decir

Código PHP:
        return $_SESSION["m_user"] = $row["nombreUser"];
        return 
$_SESSION["m_user_id"] = $row["idUser"];
        return 
$_SESSION["m_user_nick"] = $row["nickUser"];
        return 
$_SESSION["m_user_rol"]=$row["rolUser"]; 
Agradezco sus orientacioneses que recien entro en POO y muchas cosas no las doy por hechas.
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #2 (permalink)  
Antiguo 01/10/2014, 13:22
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Cuantos RETURNS se puede aplicar?

Cita:
La pregunta: Es correcto poner solo TRUE para que todos los valores sean retornados, o debo hacerlo uno a uno.. es decir
De hecho estás equivocado: return devuelve únicamente un valor, que devuelvas TRUE no implica que la $_SESSION va a devolverse también.

Y vamos, eso es teoría de programación en general, en cualquier manual encuentras información acerca de funciones y return.

http://www.php.net/manual/es/functions.user-defined.php

Si deseas devolver todos los valores de $_SESSION, no puedes devolver uno a uno, en todo caso basta con devolver la $_SESSION en si misma.

Código PHP:
return $_SESSION
Es decir, al colocar un return la ejecución de la función se finaliza ahí mismo, lógicamente cualquier instrucción después no se ejecutará jamás.

Código PHP:
Ver original
  1. function foo() {
  2.   return 1; // aquí se finaliza
  3.   return 2;
  4.   return 3;
  5. }
  6.  
  7. var_dump(foo()); // int(1)

Y tampoco tiene relación con POO, así que no te confundas, lógica es lógica, tu problema es lógico, no de POO.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 01/10/2014, 22:59
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Cuantos RETURNS se puede aplicar?

No veo la necesidad de retornar a las variables de sesión si sus valores ya quedaron grabados en la sesión actual. Basta con que los recuperes en cualquier parte de la aplicación en donde persista la sesión actual.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #4 (permalink)  
Antiguo 02/10/2014, 09:51
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Cuantos RETURNS se puede aplicar?

No se trata de variable de sesión en sí, se trata de la lógica, no es un elemento real... mi pregunta tonta o no, aplica a mi duda nada más, por eso puse un ejemplo que grafique la cuestión.
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #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: 11 años, 11 meses
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
  #6 (permalink)  
Antiguo 06/10/2014, 12:05
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Cuantos RETURNS se puede aplicar?

Estoy a full con POO, y a pesar que hay cosas que parecen lógicas, a veces se me lían y arman lagunas mentales que mezclan todos los conocimientos y desconocimientos.. XD
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...

Etiquetas: select, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:20.