Palavra-Chave 'static'
Declarar membros ou métodos de uma classe como estáticos faz deles acessÃveis sem precisar instanciar a classe. Um membro declarados como estático não pode ser acessado com um objeto instanciado da classe (embora métodos estáticos podem).
Por compatibilidade com o PHP 4, se nenhuma declaração de visibilidade for usada, então o membro ou método será tratado como se fosse declarado como public static.
Como métodos estáticos podem ser chamados sem uma instância do objeto ter sido criada, a pseudo-variável $this não é disponÃvel dentro do método declarado como estático.
Propriedades estáicas não podem ser acessadas pelo objeto usando o operador seta ->.
Chamar métodos não estáticos de maneira estática gera um aviso de nÃvel E_STRICT.
No PHP 5.3.0, é possÃvel referenciar a classe usando uma variável. Palavras chaves como self, parent ou static não são permitidos em referências dinâmicas à classes.
Example#1 Exemplo de membro estático
<?php
class Foo
{
public static $meu_estatico = 'foo';
public function valorEstatico() {
return self::$meu_estatico;
}
}
class Bar extends Foo
{
public function fooEstatico() {
return parent::$meu_estatico;
}
}
print Foo::$meu_estatico . "\n";
$foo = new Foo();
print $foo->valorEstatico() . "\n";
print $foo->$meu_estatico . "\n"; // "Propriedade" Indefinida $meu_estatico
print $foo::$meu_estatico . "\n";
$classname = 'Foo';
print $classname::$meu_estatico . "\n";
print Bar::$meu_estatico . "\n";
$bar = new Bar();
print $bar->fooEstatico() . "\n";
?>
Example#2 Exemplo de método estático
<?php
class Foo {
public static function umMetodoEstatico() {
// ...
}
}
Foo::umMetodoEstatico();
$classname = 'Foo';
$classname::umMetodoEstatico();
?>