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.
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áticas 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.
Como qualquer outra variável estática do PHP, propriedades estáticas podem somente ser inicializadas usando um valor literal ou constante; expressões não são permitidas. Então você pode inicializar uma propriedade estática para um inteiro ou array (por exemplo), você não pode inicializar com outra variável, com um retorno de função, ou um objeto.
No PHP 5.3.0, é possível referenciar a classe usando uma variável. O valor da variável não pode ser uma palavra chave (e.g. self, parent e static).
Exemplo #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"; // No PHP 5.3.0
print Bar::$meu_estatico . "\n";
$bar = new Bar();
print $bar->fooEstatico() . "\n";
?>
Exemplo #2 Exemplo de método estático
<?php
class Foo {
public static function umMetodoEstatico() {
// ...
}
}
Foo::umMetodoEstatico();
$classname = 'Foo';
$classname::umMetodoEstatico(); // No PHP 5.3.0
?>