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.