Cada membro da classe tem um nível de acessibilidade que determina onde o membro será visível. Há três deles disponíveis no PHP: público(public), protegido(protected) e privado(private).
<?php class MyClass{ public $myPublic; // acesso irrestrito protected $myProtected; // acesso somente aos filhos private $myPrivate; // acesso restrito, somente na classe atual } ?>
Acesso privado
Todos os membros, independentemente do nível de acesso são acessíveis na classe em que elas são declaradas. O único lugar onde um membro privado pode ser acessado é na mesma classe.
<?php class MyClass{ public $myPublic = 'public'; protected $myProtected = 'protected'; private $myPrivate = 'private'; function test(){ echo $this->myPublic; // permitido echo $this->myProtected; // permitido echo $this->myPrivate; // permitido } } ?>
Ao contrário das propriedades, métodos não tem que ter um nível de acesso especificado. Eles será o padrão para o acesso público a menos que seja para outro nível.
Acesso protegido (Protected)
Um membro protegido pode ser acessado de dentro da classe filho ou da classes pai, bem como de dentro da classe de inclusão.
<?php class MyChild extends MyClass{ function test(){ echo $this->myPublic; // permitido echo $this->myProtected; // permitido echo $this->myPrivate; // inacessível } } ?>
O acesso do público
Membros públicos têm acesso irrestrito. Além de qualquer membro protegido pode ser acessado, um membro do público também pode ser alcançado através de uma variável de objeto.
<?php $m = new MyClass(); echo $m->myPublic; // permitido echo $m->myProtected; // inacessível echo $m->myPrivate; // inacessível ?>
Palavra-chave var
Antes do PHP 5, a palavra-chave var foi usado para declarar propriedades. Para manter a compatibilidade com versões anteriores esta palavra-chave ainda é utilizável e dá acesso público, assim como o modificador público.
<?php class MyVars{ var $x, $y; // declaração de propriedade obsoleta } ?>
Acesso a objetos
No PHP, os objetos da mesma classe têm acesso a uns aos outros membros de classes privados e protegidos. Esse comportamento é diferente de muitas outras linguagens de programação, onde o acesso não é permitido.
<?php class MyClass{ private $myPrivate; function setPrivate($obj, $val){ $obj->myPrivate = $val; // definir a propriedade privada } } $a = new MyClass(); $b = new MyClass(); $a->setPrivate($b, 10); ?>
Diretriz de nível de Acesso
Como orientação, ao escolher um nível de acesso geralmente é melhor usar o nível mais restritivo possível. Isso ocorre porque um ou mais membros podem ser acessados e podem ser acessados de forma incorreta, o que torna o código mais difícil de debugar. Usando níveis de acesso restritivas também irá torná-lo mais fácil de modificar a classe sem quebrar o código para quaisquer outros desenvolvedores que usam essa classe.