Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Dudas básicas en PHP OO

Estas en el tema de Dudas básicas en PHP OO en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, tengo una clase abstracta de la que deberían heredar varias clases correspondientes a las diferentes capas "modelo". @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original abstract ...
  #1 (permalink)  
Antiguo 02/09/2011, 22:34
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 13 años, 5 meses
Puntos: 11
Dudas básicas en PHP OO

Hola, tengo una clase abstracta de la que deberían heredar varias clases correspondientes a las diferentes capas "modelo".

Código PHP:
Ver original
  1. abstract class Conexion {
  2.  
  3. private static $servidor = 'localhost';
  4. private static $usuario = 'root';
  5. private static $clave = 'password';
  6. private static $bddd = 'bddd';
  7. private $conexion;
  8. protected $query;
  9. public $resultado;
  10.  
  11. private function abrir_conexion() {
  12. $this->conexion = new mysqli(self::$servidor, self::$usuario,
  13. self::$clave, self::$bddd);
  14. $this->conexion->query("SET NAMES 'utf8'");
  15. }
  16.  
  17. private function cerrar_conexion() {
  18. $this->conexion->close();
  19. }
  20.  
  21. protected function consulta() {
  22. $this->abrir_conexion();
  23. $this->query = $this->conexion->query($this->query);
  24. $this->cerrar_conexion();
  25. return $this->query;
  26. }
  27.  
  28. }

¿Se usa return así en PHPOO o hay otra manera de hacerlo?

Luego en la capa modelo hago lo siguiente.

Código PHP:
Ver original
  1. require_once('conexion.php');
  2.  
  3. class Modelo extends Conexion {
  4.  
  5. public function __construct() {
  6. $this->query = "SELECT * FROM tabla WHERE campo = 'valor'";
  7. $this->resultado = $this->consulta();
  8. }
  9.  
  10. }
¿Abrir y cerrar la conexión para cada consulta consume menos recursos?
  #2 (permalink)  
Antiguo 03/09/2011, 03:10
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 7 meses
Puntos: 71
Respuesta: Dudas básicas en PHP OO

No lo hagas en cada consulta, hazlo en el constructor y destructor de la clase Modelo.
  #3 (permalink)  
Antiguo 03/09/2011, 18:49
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Dudas básicas en PHP OO

No heredes la conexión a tus modelos, recuerda que la herencia se debe aplicar cuando hay una relación de parentezco, no de uso, si tus modelos usan una base de datos, no deben de heredar, si no debe de ser una propiedad.

No es recomendable conectar y desconectar por cada query, eso hace que tu aplicación sea mas lenta.

Saludos.
  #4 (permalink)  
Antiguo 04/09/2011, 04:57
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 13 años, 5 meses
Puntos: 11
Respuesta: Dudas básicas en PHP OO

Cita:
Iniciado por GatorV Ver Mensaje
No heredes la conexión a tus modelos, recuerda que la herencia se debe aplicar cuando hay una relación de parentezco, no de uso, si tus modelos usan una base de datos, no deben de heredar, si no debe de ser una propiedad.

No es recomendable conectar y desconectar por cada query, eso hace que tu aplicación sea mas lenta.

Saludos.
Lo segundo me ha quedado claro, pero cuando dices que defina la conexión como una propiedad en cada modelo no entiendo muy bien a qué te refieres.

Me ahorraría líneas de código heredando los métodos de conexión en lugar de repetir los métodos en cada modelo. Se supone que la clase abstracta Conexion es común a todos los modelos y por ello hereda esas propiedades y métodos comunes.

¿Podrías precisarme un poquito más?
  #5 (permalink)  
Antiguo 04/09/2011, 09:53
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Dudas básicas en PHP OO

Cita:
Iniciado por Gambinoh Ver Mensaje
Lo segundo me ha quedado claro, pero cuando dices que defina la conexión como una propiedad en cada modelo no entiendo muy bien a qué te refieres.

Me ahorraría líneas de código heredando los métodos de conexión en lugar de repetir los métodos en cada modelo. Se supone que la clase abstracta Conexion es común a todos los modelos y por ello hereda esas propiedades y métodos comunes.

¿Podrías precisarme un poquito más?
Para hacer lo siguiente no puedes tener tu clase Conexion como abstracta, seria algo como:

Código PHP:
Ver original
  1. class Modelo {
  2.   private $conn = new Conexion()
  3.  
  4.   public function holaMundo() {
  5.     $this->conn->query("blah blah");
  6.   }
  7. }

Etiquetas: clase, dudas, php, tabla
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 11:51.