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!