Classes e Objetos
PHP Manual

Palavra-Chave 'static'

Dica

Esta página descreve o uso da palavra-chave static na definição de métodos e propriedades estáticas. A palavra-chave static também pode ser utilizada para definir variáveis estáticas e em late static bindings. Veja essas páginas para informações desses outros usos de static.

Declarar propriedades ou métodos de uma classe como estáticos faz deles acessíveis sem a necessidade de 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 utilizada, a propriedade ou método será tratado como se declarado como public.

Métodos estáticos

Como métodos estáticos podem ser chamados sem uma instancia do objeto criada, a pseudo-variável $this não está disponível dentro de um método declarado como estático.

Cuidado

No PHP 5, chamar métodos não estáticos estaticamente gerará um alerta de nível E_STRICT.

Aviso

No PHP 7, chamar métodos não estáticos estaticamente foi depreciado, e gerará um alerta de nível E_DEPRECATED. O suporte a chamada de métodos não estáticos estaticamente pode ser removido no futuro.

Exemplo #1 Exemplo de método estático

<?php
class Foo {
    public static function 
aStaticMethod() {
        
// ...
    
}
}

Foo::aStaticMethod();
$classname 'Foo';
$classname::aStaticMethod(); // As of PHP 5.3.0
?>

Propriedades estáticas

Propriedades estáticas não podem ser acessadas através do operador ->.

Como qualquer outra variável estática do PHP, propriedades estáticas podem ser inicializadas, até o PHP 5.6, somente usando um valor literal ou constante; expressões não são permitidas. No PHP 5.6 e em versões superiores, as mesmas regras aplicadas a expressões const: algumas expressões limitadas são possíveis, se fornecidas serão avaliadas em tempo de compilação.

A partir do 5.3.0, é possível referenciar a classe usando uma variável. O valor da variável não pode ser uma palavra chave (por exemplo, self, parent e static).

Exemplo #2 Exemplo de propriedade estática

<?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";
?>

Classes e Objetos
PHP Manual