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.
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.
No PHP 5, chamar métodos não estáticos estaticamente gerará um alerta
de nível E_STRICT
.
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 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";
?>