Estoy usando la versión estable de PHP 5.3 y, a veces, me encuentro con comportamientos muy incoherentes. Por lo que sé en herencia, todos los atributos y métodos (privados, públicos y protegidos) en super clase se pasan clase infantil.Php Herencia
class Foo
{
private $_name = "foo";
}
class Bar extends Foo
{
public function getName()
{
return $this->_name;
}
}
$o = new Bar();
echo $o->getName();
//Notice: Undefined property: Bar::$_name in ...\test.php on line 11
Pero cuando el atributo Foo :: $ _ name se define como "público", no da error. PHP tiene reglas propias de OO ???
Gracias
Editar: Ahora todas las cosas son claras. En realidad estaba pensando en "herencia", se crea una nueva clase y hereda a todos los miembros independientemente de su antecesor. No sabía que las reglas de "acceso" y las reglas de herencia son las mismas.
Edición De acuerdo con sus comentarios este fragmento debe dar un error. Pero está funcionando.
class Foo
{
private $bar = "baz";
public function getBar()
{
return $this->bar;
}
}
class Bar extends Foo
{}
$o = new Bar;
echo $o->getBar(); //baz
No. Esas reglas son exactamente las mismas que en Java y C++ donde se tomó el modelo de objetos de PHP. – troelskn
Dado que getBar() se define en la clase principal, puede acceder a la variable miembro privada. –
return $ this-> bar; Aquí $ esto se refiere al objeto Bar y la clase Bar no tiene una variable $ bar. ¿Como puede ser? – jsonx