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

Duda en POO - Herencia

Estas en el tema de Duda en POO - Herencia en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Un saludo a todos ya hace rato que no pasaba por aqui... les comento tengo tres clases @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original class Datos ...
  #1 (permalink)  
Antiguo 26/06/2013, 21:35
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 12 años, 11 meses
Puntos: 76
Duda en POO - Herencia

Un saludo a todos

ya hace rato que no pasaba por aqui... les comento

tengo tres clases

Código PHP:
Ver original
  1. class Datos
  2. {
  3.     private $q_consulta;
  4.  
  5.     protected function ConsultaUsuario()
  6.     {
  7.         $this->q_consulta = "Jhoncito";
  8.         return $this->q_consulta;
  9.     }
  10. }
  11.  
  12.  
  13. class Proceso extends Datos
  14. {
  15.  
  16.     public function getUsuario()
  17.     {
  18.         return $this->ConsultaUsuario();
  19.     }
  20.  
  21. }
  22.  
  23.  
  24. class Liquidacion extends Proceso
  25. {
  26.     public function getUsuarios()
  27.     {
  28.         return $this->ConsultaUsuario();
  29.     }
  30. }
  31.  
  32. $objLiquidacion = new Liquidacion();
  33.  
  34.  
  35. echo $objLiquidacion->getUsuarios();

la duda es la siguiente:


¿ Por que la clase Liquidacion puede acceder a los metodos protected de la clase Datos ?....

Yo pienso que si los metodos de la clase Datos estan definidos protected solo pueden ser accedidos desde la clase que la heredo osea Proceso pero no de Liquidacion , o ahi estoy equivocado ???

Gracias.

  #2 (permalink)  
Antiguo 26/06/2013, 21:49
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Duda en POO - Herencia

Estimado: la hice larga... pero al final te respondo lo mejor que puedo

- Los datos privados de la clase Base *solo* los puedes acceder desde la clase Base. Desde la Derivada accedes a OTRA variable con el mismo nombre que no se inicializa hasta que no le des valor.

- Los datos protegidos de la Base, desde ambas, haz de cuenta que accedes "por referencia", o sea es la misma variable.

Ojo ... si tienes un constructor en la clase Base y ahi seteas variables privadas, para poder "verlas" con valor en la clase Derivada te toca hacer que el constructor de la clase derivada llame al constructor de la clase Base (padre) para que inicialice esa variable con ese valor.

Código PHP:
Class Foo
{ ... }

Class 
Bar extends Foo
{
 
    public function 
__construct()
    {
       
parent::__construct();       
    }     
...



No hacer eso ultimo me estubo confundiendo un rato largo porque no veia valores que supuestamente metia en los objetos de la clase padre

Cita:
¿ Por que la clase Liquidacion puede acceder a los metodos protected de la clase Datos ?....
Ahora... eso es con DATOS.... con METODOS es lo mismo... tu puedes acceder a los metodos de la clase Base (Datos) porque estan en el mismo scope ... es como si los hubieras declarado Private en tu clase Liquidacion esos metodos protected.

Si haces Private los metodos en Datos... ya solo podras accederlos desde Datos y si re-declaras en Liquidacion sera OTRA funcion y no la misma, accediendo a su scope o sea los datos de Liquidacion y NO de Datos
__________________
Salu2!

Última edición por Italico76; 26/06/2013 a las 23:36
  #3 (permalink)  
Antiguo 27/06/2013, 07:17
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 12 años, 11 meses
Puntos: 76
Respuesta: Duda en POO - Herencia

hola

gracias por las aclaraciones , las tendre muy en cuenta ya que deseo en mis proyectos manejar POO..

gracias.
  #4 (permalink)  
Antiguo 27/06/2013, 09:15
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Duda en POO - Herencia

Nunca esta de mas pasar por la documentación http://php.net/manual/es/language.oop5.visibility.php

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)

Etiquetas: herencia, php, poo, usuarios
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:45.