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

PHP POO. Herencia. Problema con método protected de una clase padre.

Estas en el tema de PHP POO. Herencia. Problema con método protected de una clase padre. en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Estoy creando un pequeño ejemplo para mostrar y dejar claro el funcionamiento de la herencia en PHP. El ejemplo en cuestión es el siguiente. Código ...
  #1 (permalink)  
Antiguo 18/01/2013, 13:35
 
Fecha de Ingreso: diciembre-2011
Mensajes: 134
Antigüedad: 12 años, 10 meses
Puntos: 5
PHP POO. Herencia. Problema con método protected de una clase padre.

Estoy creando un pequeño ejemplo para mostrar y dejar claro el funcionamiento de la herencia en PHP.

El ejemplo en cuestión es el siguiente.

Código PHP:

<?php
class MyClass
{
    public function 
myFunc() {
        echo 
"Vengo del objeto padre <br>";
        echo 
"MyClass::myFunc() <br>";
    }
    
    public function 
noSobreescrita() {
        echo 
"vengo del padre, pero no estoy sobreescrita";
    }
}

class 
OtherClass extends MyClass
{
    
// Sobrescritura de definición parent
    
public function myFunc()
    {
        
// Pero todavía se puede llamar a la función parent
        
echo"---------------------------------------------------<br>";
        echo 
"Vengo del objeto hijo <br>";
        echo 
"OtherClass::myFunc() <br>";
        
parent::myFunc();
    }
}

$objetoPadre = new MyClass();
$objetoPadre->myFunc();
$objetoHijo = new OtherClass();
$objetoHijo->myFunc();
$objetoHijo->noSobreescrita();
?>
Únicamente pretendo mostrar que todas las funciones que sean Public o Protected del padre, serán atribuibles al hijo. O sea, que todas las funciones disponibles de la clase padre estan disponibles en la clase hijo.

Ademas también pretendo mostrar que podemos sobreescribir funciones en la clase hijo y a su vez utilizar las funciones del padre que lleven el mismo nombre, y que para esto utilizaremos parent::

Si ejecuto el codigo tal y como esta ahora. me funciona perfectamente. pero si hago que la función noSobreescrita sea protected , no funciona.

No entiendo por que, me da un error.

Empezando con la programacion orientada a objetos en php, pero pensaba que tenia estos conceptos bastante claros (ya vi POO en java) hasta que tope con este problema.
  #2 (permalink)  
Antiguo 18/01/2013, 13:41
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 6 meses
Puntos: 839
Respuesta: PHP POO. Herencia. Problema con método protected de una clase padre.

La visibilidad protected indica que el método está disponible dentro de la clase hija, pero no desde fuera. Por eso te dará error si cambias la visibilidad del método noSobreescrita() a protected, ya que estás intentando llamarla desde fuera.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 18/01/2013, 13:45
 
Fecha de Ingreso: diciembre-2011
Mensajes: 134
Antigüedad: 12 años, 10 meses
Puntos: 5
Respuesta: PHP POO. Herencia. Problema con método protected de una clase padre.

Cita:
Iniciado por David Ver Mensaje
La visibilidad protected indica que el método está disponible dentro de la clase hija, pero no desde fuera. Por eso te dará error si cambias la visibilidad del método noSobreescrita() a protected, ya que estás intentando llamarla desde fuera.
gracias. entendí mal el funcionamiento de protected. no se por que deduci que siendo protected podria llamar desde fuera a las funciones de la clase hija heredadas del padre ... no tiene ninguna lógica ahora que lo pienso.

Etiquetas: clase, herencia, php, poo, protected
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 20:32.