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

Error de principiante al comenzar con PHP POO

Estas en el tema de Error de principiante al comenzar con PHP POO en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, Tengo conocimientos básicos sobre PHP y me he decantado por profundizar más con este lenguaje, empezando por la metodología POO. Haciendo un ejercicio super ...
  #1 (permalink)  
Antiguo 02/01/2013, 14:55
 
Fecha de Ingreso: marzo-2008
Mensajes: 186
Antigüedad: 16 años, 1 mes
Puntos: 3
Exclamación Error de principiante al comenzar con PHP POO

Hola,

Tengo conocimientos básicos sobre PHP y me he decantado por profundizar más con este lenguaje, empezando por la metodología POO.

Haciendo un ejercicio super simple para conectar con la base de datos y realizar una consulta, me ha saltado un fallo. Seguro que es ridículo, pero forma parte de mi inexperiencia. No me enrollo más y pongo el código:

archivo pdoconnect.php. Clase para conectar con la base de datos (aquí todo funciona OK)

Código PHP:
Ver original
  1. <?php
  2. class connectBD{
  3. // connect info
  4. protected $bdata;
  5. protected $user;
  6. protected $pass;
  7. // construct
  8. public function __construct($bd,$us,$pa){
  9.     $this->bdata=$bd;
  10.     $this->user=$us;
  11.     $this->pass=$pa;
  12.     try{
  13.     $con = new PDO($this->bdata,$this->user,$this->pass);
  14.         } catch(PDOException $ec) {
  15.             echo "Error al conectar: ".$ec->getMessage();
  16.     }
  17. }//end __construct
  18. }//end class
  19. $conn = new connectBD("mysql:dbname=pruebas;host=localhost","root","");
  20. ?>

El siguiente archivo es pdoexec.php con el código que me tira el fallo:

Código PHP:
Ver original
  1. <?php
  2. include("pdoconnect.php");
  3. class execQuery extends connectBD{
  4.     protected $queryBD;
  5.     public function querydatabase($quer){
  6.         $this->queryDB=$quer;
  7.         try{
  8.             $query = $con->exec($this->queryDB);
  9.         }catch(PDOException $em){
  10.             echo "No se hizo la consulta: ".$em->getMessage();
  11.         }
  12.     }//end function
  13. }//end class
  14. $exq = new execQuery();
  15. $exq -> querydatabase("SELECT nombre,apellidos FROM datos");
  16. ?>

Y me salta el siguiente error en pantalla (en pdoexec.php):

Código PHP:
Ver original
  1. Warning: Missing argument 1 for connectBD::__construct(), called in C:\xampp\htdocs\phpracticas\pdoexec.php on line 14 and defined in C:\xampp\htdocs\phpracticas\pdoconnect.php on line 8
  2.  
  3. Warning: Missing argument 2 for connectBD::__construct(), called in C:\xampp\htdocs\phpracticas\pdoexec.php on line 14 and defined in C:\xampp\htdocs\phpracticas\pdoconnect.php on line 8
  4.  
  5. Warning: Missing argument 3 for connectBD::__construct(), called in C:\xampp\htdocs\phpracticas\pdoexec.php on line 14 and defined in C:\xampp\htdocs\phpracticas\pdoconnect.php on line 8
  6.  
  7. Notice: Undefined variable: bd in C:\xampp\htdocs\phpracticas\pdoconnect.php on line 9
  8.  
  9. Notice: Undefined variable: us in C:\xampp\htdocs\phpracticas\pdoconnect.php on line 10
  10.  
  11. Notice: Undefined variable: pa in C:\xampp\htdocs\phpracticas\pdoconnect.php on line 11
  12. Error al conectar: invalid data source name
  13. Notice: Undefined variable: con in C:\xampp\htdocs\phpracticas\pdoexec.php on line 8
  14.  
  15. Fatal error: Call to a member function exec() on a non-object in C:\xampp\htdocs\phpracticas\pdoexec.php on line 8

Si véis alguna burrada anormal en mi código, por favor sed comprensivos.

Espero vuestra ayuda, gracias por anticipado.
  #2 (permalink)  
Antiguo 02/01/2013, 16:18
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: Error de principiante al comenzar con PHP POO

Primero, lee sobre el principio de Liskov, esa relación de herencia que estas haciendo no tiene caso.

Segundo, tus errores si en $con estas guardando el objeto PDO, también lo tienes que hacer una propiedad de tu clase (tal como haces $bddata, $user y $pass).

Al heredar una clase, se hereda todo, hasta el constructor, por lo que al crear el objeto tienes que pasarle los mismos parámetros que a la clase padre. Pero aqui la herencia no tiene nada que ver, ya que no debes de heredar por heredar (Liskov).

Saludos.
  #3 (permalink)  
Antiguo 03/01/2013, 14:04
 
Fecha de Ingreso: marzo-2008
Mensajes: 186
Antigüedad: 16 años, 1 mes
Puntos: 3
Respuesta: Error de principiante al comenzar con PHP POO

Muchas gracias GatorV, ya he leído sobre el principio de Liskov, ¡cuánto me queda por aprender!

Etiquetas: mysql, pdo, php, poo
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 22:22.