Problema 1:
¿Getters y Setters con MySQL?
Código PHP:
Ver original
<?php private $nombre; public function __construct($id = null) { $this->nombre = $this->getNombre(); $this->correo = $this->getCorreo(); } public function setNombre() { $query parent::query(); while($row = results($query)) { return $row["nombre"]; } } public function getNombre() { return $this->nombre; } public function setCorreo() { $query parent::query(); while($row = results($query)) { return $row["correo"]; } } public function getCorreo() { return $this->correo; } } ?>
Bien, esto claramente es poco eficiente. Consultar dos veces la BD pudiendo consultarla una única vez es absurdo. Así pues, decidí unificar haciendo esto:
Código PHP:
Ver original
<?php private $nombre; private $correo; public function __construct($id = null) { $this->setAll(); } public function setAll() { $query parent::query(); while($row = results($query)) { $this->nombre = $row["nombre"]; $this->correo = $row["correo"]; } } public function getNombre() { return $this->nombre; } public function getCorreo() { return $this->correo; } } ?>
El problema: Si quiero imprimir solo el correo, también consultará en la BD el nombre y tantos campos como propiedades tenga la clase. Nuevamente, pérdida de eficiencia.
¿Cuál es la mejor forma de hacer esto?
Segundo Problema:
Quiero imprimir los 5 primeros usuarios de la siguiente forma:
Código HTML:
Nombre: Nombre 1 Correo: Correo 1 Nombre: Nombre 2 Correo: Correo 2 (...) Nombre: Nombre 5 Correo: Correo 5
Código PHP:
Ver original
<?php for($i=1;$i<=5;$i++) { $user = new usuario($i); //creamos el objeto para el usuario 1, el 2, el 3... el 5. echo $user->getNombre; echo $user->getCorreo; } ?>
Entonces, decidí crear un array multidimensional en el objeto usuario.
Código PHP:
Ver original
<?php private $nombre; private $correo; public function __construct($id = null) { $query parent::query(/*ÚLTIMOS 5 USUARIOS*/); while($row = results($query)) { $nombre = $row["nombre"]; $correo = $row["correo"]; } } public function getAll() { $i = 0; foreach($this->nombre as $nombre) { $i++ } } ?>
Ahora tengo un arreglo multidimensional con todos los datos de los 5 últimos usuarios. Y para imprimir los datos:
Código PHP:
Ver original
<?php $objeto = new usuario(); $getall = $objeto->getAll(); foreach($getall as $usuario) { echo "Nombre ".$usuario["nombre"]; echo "Correo ".$usuario["correo"]; } ?>
¿Está ideado correctamente? ¿Hay alternativas mejores? Por favor, me gustaría que aquellos expertos en POO me comentasen cómo lo ven o dijesen cómo lo harían ellos.
Gracias.