Ver Mensaje Individual
  #6 (permalink)  
Antiguo 07/05/2010, 18:43
Avatar de abimaelrc
abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Evitar repetidas llamadas a Metodos, Persistencia y herencia seria la solu

Si te fijas bien en la instancia
Código PHP:
Ver original
  1. $obj = new fetch('hostname','username','password','database');
llamé al nieto (si es que se puede decir de esa forma). Todas los métodos se llamaron implicitamente, es decir desde el nieto llamé los metodos del abuelo (si es que podemos decirlo de esta forma) y del padre. Te expongo otro ejemplo para que quedes claro
Código PHP:
Ver original
  1. <?php
  2. class fooBarCandy{
  3.     private $bar;
  4.  
  5.     public function __construct($bar){
  6.         $this->bar = $bar;
  7.     }
  8.  
  9.     public function bar(){
  10.         return $this->bar;
  11.     }
  12. }
  13.  
  14. class fooBar extends fooBarCandy{
  15.     private $candy;
  16.  
  17.     public function candy($candy){
  18.         return $this->candy = $candy;
  19.     }
  20. }
  21.  
  22. class foo extends fooBar{
  23.  
  24. }
  25.  
  26. $obj = new foo('fooBarCandy');
  27. echo $obj->bar() . '<br />';
  28. echo $obj->candy('fooBar');
Si te fijas la clase nieta no tiene nada y desde la clase nieta llamo tanto los método de la clase padre y la clase abuelo, porque ya están declaradas implicitamente.

Ahora en el primer ejemplo que te indique el único método que no llamé implícito es el de __contruct porque me daba un error (Warning: mysql_query() expects parameter 2 to be resource, null given in ....... on line 26) en la parte del query, pero si le coloco el constructor como te indiqué funciona correctamente. Entonces me gustaría saber ¿por qué en el primer ejemplo que expongo, tengo que forzosamente indicarle el __construct de la clase abuela a la clase padre? ¿No es de suponer que lo tome implícitamente? Eso sí, no es necesario indicar, en el primer ejemplo, la última clase el __construct.

En fin el primer ejemplo se puede hacer de esta forma sin errores:
Código PHP:
Ver original
  1. <?php
  2. class classConnectDb{
  3.     private $mysql_host;
  4.     private $mysql_user;
  5.     private $mysql_pass;
  6.     private $mysql_db;
  7.     protected $connect_db;
  8.  
  9.     public function __construct($host, $user, $pass, $db){
  10.         $this->mysql_host = $host;
  11.         $this->mysql_user = $user;
  12.         $this->mysql_pass = $pass;
  13.         $this->mysql_db = $db;
  14.     }
  15.  
  16.     public function connectDb(){
  17.         $this->connect_db = mysql_connect($this->mysql_host, $this->mysql_user, $this->mysql_pass) or die(mysql_error());
  18.         mysql_select_db($this->mysql_db,$this->connect_db);
  19.     }
  20. }
  21.  
  22. class query extends classConnectDb{
  23.     protected $mysql_query;
  24.  
  25.     public function __construct($host, $user, $pass, $db){
  26.         parent::__construct($host, $user, $pass, $db);
  27.     }
  28.  
  29.     public function query($query){
  30.         $this->mysql_query = mysql_query($query, $this->connect_db) or die(mysql_error());
  31.     }
  32. }
  33.  
  34. class fetch extends query{
  35.     public function fetchQuery(){
  36.         return mysql_fetch_assoc($this->mysql_query);
  37.     }
  38. }
  39.  
  40. $obj = new fetch('hostname','username','password','database');
  41. $obj->connectDb();
  42. $obj->query('SELECT * FROM tabla');
  43. while($row = $obj->fetchQuery()){
  44.     var_dump($row);
  45. }
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Última edición por abimaelrc; 07/05/2010 a las 20:37