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.
Membros de uma classe devem ser definidos com public, private, ou protected.
Exemplo 19-8. 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.
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-9. 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 ?>
|
|