Back-End

27 ago, 2007

PHP5 + OOP – Propriedades e Métodos Estáticos

Publicidade

Dando seqüência aos nossos estudos, trazemos mais um recurso que o PHP5 nos traz com relação à OOP: os membros estáticos.

O que difere uma propriedade ou método estático de propriedades e métodos de classe é o fato de se poder acessar um membro estático sem precisar instanciar a classe a que ele pertence. Este recurso nos auxilia quando criamos uma classe que possui um método muito usado, então definimos este método como static e podemos acessá-lo rapidamente economizando no mínimo uma linha de código.

Declaração

A declaração de membros estáticos é feita colocando a palavra reservada “static” na frente do nome do membro como vemos abaixo:

<?php
	class MinhaClasse
	{
		public static $propriedade = "Minha propriedade estática <br />";
		
		public static function MetodoEstatico()
		{
			echo "Método Estático";
		}
	}
	//Acessando as propriedades estáticas
	echo MinhaClasse::$propriedade;
	//Acessando os métodos estáticos
	MinhaClasse::MetodoEstatico();	
?>

Como vimos acima, a maneira de acesso é bem simples e similar ao acesso a constantes. Basta utilizar o operador :: (dois pontos).

Obs: Se tentarmos acessar um método de classe sem a declaração da mesma, podemos ter como retorno um aviso de nível E_STRICT.

Acessando internamente

Os membros internos também podem ser acessados internamente através do operador self:: como mostrado abaixo:

<?php
	class MinhaClasse
	{
		private static $propriedade = "Minha propriedade estática <br />";
		
		public static function RetornaPropriedade()
		{
			return self::$propriedade;
		}
		
		public static function UsandoMetodoInterno()
		{
			echo self::RetornaPropriedade();
		}
	}
	//Acessando as propriedades estáticas internamente
	echo MinhaClasse::RetornaPropriedade();
	//Acessando os métodos estáticos internamente
	MinhaClasse::UsandoMetodoInterno();
?>

Simples e fácil, porém muito útil em diversos casos.

Herança de membros estáticos

Membros estáticos também podem ser herdados, o que nos auxilia no reaproveitamento de código. Tais membros herdados podem ser acessados através de parent:: e podem ser usados dentro de métodos de classes ou métodos estáticos também como podemos ver:

<?php

	class MinhaClasse
	{
		public static $propriedade = "Minha propriedade estática <br />";
		
		public static function MetodoEstatico()
		{
			echo "Método Estático <br />";
		}
	}


	class OutraClasse extends MinhaClasse
	{
		public function __construct()
		{
			//Acessando propriedade de MinhaClasse
			echo parent::$propriedade;
			//Acessando método de MinhaClasse
			parent::MetodoEstatico();
		}
		
		public static function OutroEstatico()
		{
			//Acessando propriedade de MinhaClasse
			echo parent::$propriedade;
			//Acessando método de MinhaClasse
			parent::MetodoEstatico();
		}
	}
	
	$obj = new OutraClasse();
	//Ou
	OutraClasse::OutroEstatico();	
?>

É um recurso bastante simples, mas muito útil em algumas situações que encontramos no dia a dia. Basta usar a criatividade para tirarmos o melhor proveito possível.

Qualquer dúvida, basta deixar um comentário abaixo. Abraços e até a próxima!