Back-End

17 ago, 2007

PHP5 + OOP – Resolução de Escopos

Publicidade

O PHP5 nos permite implementar um novo modo de acesso a constantes e métodos estáticos (veremos métodos estáticos no próximo artigo). Dessa maneira possuímos resolução de escopo para as definições que são acessadas via operador de definição de escopo :: (dois pontos duplos).

Para acessarmos uma constante de fora de uma determinada classe, podemos utilizar a seguinte definição:

Nome_da_classe::constante

Sendo que não é necessário instanciar a classe, chamamos diretamente seu nome seguido do operador :: seguido do nome da constante ou método estático.

Podemos ver mais claramente no exemplo:

<?php
	class MinhaClasse
	{
		const CONSTANTE = "Minha Constante de Minha Classe";
	}
	
	echo MinhaClasse::CONSTANTE;
?>

Obtemos como retorno:

Minha Constante de Minha Classe.

Conseguimos acessar a propriedade CONSTANTE sem instanciar a classe.

Quando trabalhamos com herança de classes temos dois métodos novos que entram em cena: self e parent. O self é utilizado quando queremos acessar um membro interno da classe e o parent quando queremos acessar um membro da classe que foi herdada. Isso vale para constantes, métodos estáticos e métodos pré-definidos como __construct e __destruct.

NOTA: Aqui também são válidas as regras de visibilidade (acessibilidade) implementadas pelo PHP5, ou seja, se for definido um membro como private independente dele ser static ou não somente a classe que o definiu poderá acessa-lo.

Vejamos agora um exemplo de self e parent:

<?php
	class MinhaClasse
	{
		const CONSTANTE = "Minha Constante de Minha Classe";
	}
	
	class OutraClasse extends MinhaClasse
	{
		public static $estatico = "Meu valor estático da outra classe";
		
		public static function escopo()
		{
			echo parent::CONSTANTE."<br />";
			echo self::$estatico;
		}
	}
	
	OutraClasse::escopo();
?>

Obtemos o retorno:

Minha Constante de Minha Classe

Meu valor estático da outra classe

Através de self, acessamos o atributo da própria classe. Com parent acessamos a constante definida na classe que foi herdada.

Podemos ver está técnica sendo usada na sobrecarga de construtores na herança de classes como mostra o exemplo abaixo:


<?php
	class Pessoa
	{
		private $sexo;
		private $nome;
		private $idade;
		
		function __construct($sexo, $nome, $idade)
		{
			$this->sexo	 = $sexo;
			$this->nome	 = $nome;
			$this->idade = $idade;
		}
	}
	
	class Homem extends Pessoa
	{
		private $forca;
		
		function __construct($forca)
		{
			parent::__construct("Masculino", "Gui", "22");
			$this->forca = $forca;
		}
	}
?>

Como vimos, o uso do operador de resolução de escopo é simples e objetivo, com métodos específicos de acesso interno e para herança. No próximo artigo veremos métodos estáticos.

Qualquer dúvida basta deixar um comentário abaixo.

Abraços e até a próxima.