Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
não entendi o resultado desse exemplo do site do php.net
pensei assim:
como a classe Foo faz a sobrescrita do método testPublic() logicamente ele será acionado.
o método private não é herdado pela classe filha, logo um método independente chamado testPrivate() é criado na classe Foo.
Não entendi a saída de: "Bar::testPrivate" já que Foo não tem acesso a este método e deveria acessar o seu método testPrivate() imprimindo "Foo::testPrivate".
alguém pode ajudar?
<?php
class Bar
{
public function test() {
$this->testPrivate();
$this->testPublic();
}
public function testPublic() {
echo "Bar::testPublic";
}
private function testPrivate() {
echo "Bar::testPrivate";
}
}
class Foo extends Bar
{
public function testPublic() {
echo "Foo::testPublic";
}
private function testPrivate() {
echo "Foo::testPrivate";
}
}
$myFoo = new foo();
$myFoo->test();
/* RESULTADO:
Bar::testPrivate
Foo::testPublic
*/
>
Porque o método 'test' é implementado em 'Bar', não em 'Foo'
Então quando realizo herança a classe filha tem disponível todos os métodos e atributos independente de eles serem public, protected ou private. Só que na classe filha eu só tenho acesso direto naqueles que são public e protected. E na classe pai eu consigo executar os que são private por meio de métodos com uma instância da classe filha. É isso?
A visibilidade é "private".
Significa que está visivel somente para a classe onde ela foi definida.
O método "test" foi também declarado em "Bar". Por isso, "test" enxerga o "testPrivate" declarado em "Bar".
Fui claro?
Outro exemplo:
class Classe1 {
private function anda(){
echo 'andando...';
}
protected function corre(){
echo 'correndo...';
}
}
class Classe2 extends Classe1 {
public function corre(){
echo 'Chamando de classe2, entao ';
parent::corre();
}
public function anda(){
echo 'Chamando o "pai"...';
parent::anda();
}
}
$instance = new Classe2();
$instance->corre(); // Saida: "Chamando em classe2, entao correndo...";@braços e fique com Deus!
obrigado pela ajuda. problema resolvido
Porque o método 'test' é implementado em 'Bar', não em 'Foo'