PHP - duda en foreach

   
Vista:

duda en foreach

Publicado por victor (2 intervenciones) el 29/04/2014 01:29:55
en el libro POO y MVC en PHP – Eugenia Bahit
tengo este metodo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# Traer datos de un usuario
public function get($user_email='') {
    if($user_email != '') {
        $this->query = "
        SELECT
        id, nombre, apellido, email, clave
        FROM
        usuarios
        WHERE
        email = '$user_email'
        ";
        $this->get_results_from_query();
    }
 
    if(count($this->rows) == 1) {
        foreach ($this->rows[0] as $propiedad=>$valor) {
            $this->$propiedad = $valor;
        }
        $this->mensaje = 'Usuario encontrado';
    } else {
        $this->mensaje = 'Usuario no encontrado';
    }
}

dentro del foreach en la linea que resalto a continuacion tengo la duda de que este bien escrito dado que $propiedad no es un atributo de la clase a la que pertenece el metodo. Si en cambio existe una variable llamada $clave.

que es lo que haria ese foreach???
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Vainas

duda en foreach

Publicado por Vainas (254 intervenciones) el 29/04/2014 11:07:54
Buenas:

Primero que nada: podrias colocar el link al libro (siempre y cuando sea gratuito el mismo) para ahorrar trabajo . A menos que este prohibido en este foro (cosa que desconozco).

http://eugeniabahit.blogspot.com.es/2011/07/poo-y-mvc-en-php.html

Los atributos de usuarios_model.php son:

1
2
3
4
5
public $nombre;
public $apellido;
public $email;
private $clave;
protected $id;

Y los que hereda de DBAbstractModel. Para acceder a ellos lo haces de esta forma:

//Primero crearias un objeto del tipo de clase
$obj = new Usuario();
//Y accederias al atributo de esta forma
$r = $obj->nombre;

Si lo hicieses dentro de la misma clase tendrias que usar this de esta forma:
//Queremos guardar el nombre actual en una variable temporal
$r = $this->nombre;

Si has llegado hasta aqui sin problemas vamos al ultimo detalle. Te has fijado que para acceder en todos los casos uso nombre sin el simbolo $ delante?

Veamos ahora que tiene $this->rows.

$this->rows[0] tiene un array asociativo de una unica fila, es decir algo asi:
1
2
3
4
5
6
7
array(
    nombre=> valor1,
    apellido => valor2,
    email => valor3,
    clave=> valor4,
    id=> valor5,
)

Dentro del foreach $propiedad tomara el valor de la clave (o key en ingles) y $valor el del valor dentro de esa clave. La primera vez $propiedad sera igual a "nombre" y $valor igual a "valor1"

Esto es lo que se conoce como variables dinamicas en php. Existe en la forma estructurada del lenguaje y en la forma orientada a objetos que es esta.

La primera ves que pase por el foreach $propiedad vale "nombre" con lo cual:

$this->$propiedad cambiara a $this->nombre (esta si que existe) y metera dentro su valor: $this->nombre = $valor;

La segunda vez que pase $propiedad valdrá apellido con lo cual sera $this->apellido = $valor....

Espero haberme explicado.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

duda en foreach

Publicado por victor (2 intervenciones) el 30/04/2014 03:19:25
Gracias Vainas! lei en la documentacion sobre variables de variables (o variables dinamicas) y junto con tu explicacion me esta quedando super claro amigo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar