Visibilidade é uma grande parte da programação orientada a objetos. Na prática, permite que você controle quem poderá acessar suas variáveis ou funções, prevenir quem pode herda-la entre outros aspectos que se pode controlar.
Declarar visibilidade de funções no PHP é opcional, no entanto, é uma boa prática de programação. Caso você não explicite a visibilidade, será sempre público.
O que é modificador de acesso
Modificador de acesso é a palavra chave que define um atributo, classe ou método a sua visibilidade. É um recurso bastante comum em orientação a objetos.
Quais são os modificadores de acesso no PHP
A linguagem PHP é bastante simples neste ponto. Basicamente, você tem apenas três diferentes modificadores: privado (private), protegido (protected) ou público (public). Vou explicar abaixo como funciona cada um desses modificadores.
- Private: significa que apenas membros ou funções da classe podem acessa-la.
- Protected: significa que apenas os membros ou funções da classe podem acessa-la e também, as classes que herdar delas.
- Public: significa que todas as classes podem acessar, independente se herdar delas ou não.
Exemplos de visibilidade de classes
Como disse anteriormente, a visibilidade pública é a menos restritiva disponível no PHP. Se você não definir, será público por default. Métodos ou variáveis públicas podem ser acessadas de qualquer lugar.
Veja o exemplo abaixo.
class teste { public $variavel1; public $variavel2; public function metodo() { } } $objA = new teste(); echo $objA->variavel1; //Acessível fora da classe. $objA->metodo(); //Acessível fora da classe.
No exemplo acima é bastante simples e demonstra o que pode resultar desastroso em alguns cenários. Com a classe totalmente pública, não há restrição para acessar suas propriedades e métodos fora da classe.
Exemplo de visibilidade privada no PHP
Métodos privados ou propriedades serão acessíveis apenas dentro de suas classes. O desenvolvedor que utilizará jamais conseguirá manipular as variáveis ou funções internas fora da classe. São usadas apenas quando você não quer expor essa informações fora da classe.
Class novoTesteClassePublica { public $abc; private $xyz; public function publicoFazer($a) { echo $a; } private function privadoFazer($b) { echo $b; } public function publicoFazerRotina() { $this->xyz = 1; $this->privadoFazer(1); } } $exemploObjeto = new novoTesteClassePublica(); $exemploObjeto ->abc = 73; //Funciona perfeitamente $exemploObjeto ->xyz = 144;//Irá ocorrer um erro $exemploObjeto ->publicoFazer("Rodrigo"); //Irá exibir a palavra "Rodrigo" $exemploObjeto ->privadoFazer(1); //Novamente Dará erro $exemploObjeto ->publicoFazerRotina();// Dentro deste método existe uma função privada. Como é executado dentro de uma função pública, não haverá erro.
Exemplo de visibilidade protegida no PHP
Visibilidade protegida no PHP são úteis em caso de herança e de implementação de interfaces. Métodos protegidos ou variáveis são disponíveis apenas dentro de suas classes e nas classes filhas.
Vamos para mais um exemplo:
class ClassePai { protected $pr; public $a protected function testeParente() { echo 'Apenas um teste'; } } // Classe herdada de ClassePai class ClasseFilha extends ClassePai { public function testeFilho() { $this->testeParente(); //Irá funcionar } } $objParente = new ClassePai(); $objParente->testeParente();//Irá ocorrer um erro $objFilha = new ClasseFilha(); $objFilha->testeFilho(); // Funciona porque a classe filha irá invocar o método da classe pai.