Back-End

2 jul, 2007

PHP5 + OOP – Parte 03 (Visibilidade)

Publicidade

Olá amigos. O PHP5 implementa um aspecto importante da OOP: a visibilidade. E nesta versão possuímos 3 níveis de acesso: public, protected e private. Vamos conhecer cada um delas nas próximas linhas.

  • Public: Todo atributo, propriedade ou método definido como public pode ser acessado de qualquer lugar da aplicação, é considerado global.
  • Protected: Todo atributo, propriedade ou método definido como protected só pode ser acessado dentro da classe que o implementa e dentro das classes herdadas da classe que contem o membro.
  • Private: Todo atributo, propriedade ou método definido como private só pode ser acessado dentro da classe que o definil gerando um erro de acesso a classes externas mesmo que herdem da classe que contém o membro.

Segue abaixo a implementação com atributos:


<?php
	//Classe
	class Access1
	{
		//Atributos com nível de acesso
		public $publico = "Acesso publico ! <br />";
		protected $protegido = "Acesso protegido ! <br />";
		private $privado = "Acesso privado ! <br />";
		
		//Construtor da classe
		public function __construct()
		{
			echo $this->publico;
			echo $this->protegido;
			echo $this->privado;
		}
	}
		
	//Instância (Objeto)
	$obj = new Access1();
?>

Esta implementação gera o seguinte retorno:

Acesso publico !

Acesso protegido !

Acesso privado !

Conseguimos acessar todos os atributos, pois estamos utilizando-os dentro da classe que os define. Agora vamos herdar a classe:


<?php
	//Classe
	class Access1
	{
		//Atributos com níuvel de acesso
		public $publico = "Acesso publico ! <br />";
		protected $protegido = "Acesso protegido ! <br />";
		private $privado = "Acesso privado ! <br />";
		
		//Construtor da classe
		public function __construct()
		{
			echo $this->publico;
			echo $this->protegido;
			echo $this->privado;
		}
	}
	
	class Access2 extends Access1
	{
		public function __construct()
		{
			echo $this->publico;
			echo $this->protegido;
			echo $this->privado;
		
		}
	}
		 
	//Instância (Objeto)
	$obj = new Access2();
?>

Teremos o seguinte retorno:

Acesso público !

Acesso protegido !

Pois como estamos herdando a classe os membros (nesse caso o atributo) privado não está acessível.

Caso seja necessário acessar os atributos através da instância da classe, somente o atributo público estará disponível:


<?php
	//Classe
	class Access1
	{
		//Atributos com nível de acesso
		public $publico = "Acesso publico ! <br />";
		protected $protegido = "Acesso protegido ! <br />";
		private $privado = "Acesso privado ! <br />";
		 
		//Construtor da classe
		public function __construct()
		{
		
		}
	}
	
	//Instância (Objeto)
	$obj = new Access1();
	echo $obj->publico; //Retorna Acesso publico ! 
	echo $obj->protegido; //Retorna Fatal error: Cannot access protected property Access1::$protegido
	echo $obj->privado; //Retorna Fatal error: Cannot access private property Access1::$privado
?>

Nesta parte da nossa jornada falamos sobre visibilidade a membros, exemplificando com atributos. Estas definições se aplicam de maneira idêntica a propriedades e métodos também.

Nota: Vale lembrar que, se um nível de acesso não for definido explicitamente, o PHP define como public por padrão.

Nota 2: Interessante citar também que, se você possui um método na classe pai definido como protected, e sobrecarrega este método na classe filha, ele deve ter visibilidade igual ou inferior ao método original. Como seu método da classe pai é protected, então deve ser redefinido como protected ou public.

Qualquer dúvida, basta deixar um comentário abaixo ou entrar em contato comigo.

Até a próxima!