Manual do PHP
Anterior | Capítulo 19. Classes e Objetos (PHP 5) | Próxima

# Visibilidade

A visibilidade de uma propriedade ou método pode ser definida prefixando a declaração com as palavras-chave: 'public','protected' ou 'private'. Itens declarados como public podem ser acessados por todo mundo. Protected limita o acesso a classes herdadas (e para a classe que define o item). Private limita a visibilidade para apenas a classe que define o item.

## Visibilidade dos membros

Membros de uma classe devem ser definidos com public, private, ou protected.

Exemplo 19-9. Declaração de Membros
`<?php /** * Define MinhaClasse */ class MinhaClasse { public $publica = 'Public'; protected $protegida = 'Protected'; private $privada = 'Private'; function imprimeAlo() { echo $this->publica; echo $this->protegida; echo $this->privada; } } $obj = new MinhaClasse(); echo $obj->publica; // Funciona echo $obj->protegida; // Erro Fatal echo $obj->privada; // Erro Fatal $obj->imprimeAlo(); // Mostra Public, Protected e Private /** * Define MinhaClasse2 */ class MinhaClasse2 extends MinhaClasse { // Nós podemos redeclarar as propriedades públicas e protegidas mas não as privadas protected $protegida = 'Protected2'; function imprimeAlo() { echo $this->publica; echo $this->protegida; echo $this->privada; } } $obj2 = new MinhaClasse2(); echo $obj2->publica; // Works echo $obj2->privada; // Undefined echo $obj2->protegida; // Fatal Error $obj2->imprimeAlo(); // Mostra Public, Protected2, not Private ?>`

> Nota: O uso da declaração de variável com a palavra-chave var não é mais válida para objetos do PHP 5. Para compatibilidade, presumirá-se que uma variável declarada no php tenha visibilidade public, e um aviso `E_STRICT` será mostrado na tela.

## Visibilidades de métodos

Métodos de classe devem ser definidos com public, private, ou protected. Métodos sem qualquer declaração são definidas como public.

Exemplo 19-10. Declaração de método
`<?php /** * Define MinhaClasse */ class MinhaClasse { // Contrutores devem ser public public function __construct() { } // Declara um método public public function MeuPublico() { } // Declara um método protected protected function MeuProtegido() { } // Declara um método private private function MeuPrivado() { } // Esse é public function Foo() { $this->MeuPublico(); $this->MeuProtegido(); $this->MeuPrivado(); } } $minhaclasse = new MinhaClasse; $minhaclasse->MeuPublico(); // Funciona $minhaclasse->MeuProtegido(); // Erro Fatal $minhaclasse->MeuPrivado(); // Erro Fatal $minhaclasse->Foo(); // Public, Protected e Private funcionam /** * Define MinhaClasse2 */ class MinhaClasse2 extends MinhaClasse { // Esse é public function Foo2() { $this->MeuPublico(); $this->MeuProtegido(); $this->MeuPrivado(); // Erro Fatal } } $minhaclasse2 = new MinhaClasse2; $minhaclasse2->MeuPublico(); // Funciona $minhaclasse2->Foo2(); // Public e Protected funcionam, Private não ?>`

Anterior | Principal | Próxima
Construtores and Destrutores | Acima | Operador de Resolução de Escopo (::)