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, definir funções anônimas 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 declarado como estático não pode ser acessado através de uma instância da classe.

Métodos estáticos

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

Aviso

Chamar métodos não estáticos, estaticamente, lança um Error.

Anteriormente ao PHP 8.0.0, chamar um método não estático estaticamente estava descontinuado, e gerava um aviso E_DEPRECATED.

Exemplo #1 Exemplo de método estático

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

Foo::aStaticMethod();
$classname = 'Foo';
$classname::aStaticMethod();
?>

Propriedades estáticas

Propriedades estáticas são acessíveis utilizando o Operador de Resolução de Escopo (::) e não podem ser acessados através do operador de objeto (->).

É 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
$my_static = 'foo';

public function
staticValue() {
return
self::$my_static;
}
}

class
Bar extends Foo
{
public function
fooStatic() {
return
parent::$my_static;
}
}


print
Foo::$my_static . "\n";

$foo = new Foo();
print
$foo->staticValue() . "\n";
print
$foo->my_static . "\n"; // "Propriedade" não definida, my_static

print $foo::$my_static . "\n";
$classname = 'Foo';
print
$classname::$my_static . "\n";

print
Bar::$my_static . "\n";
$bar = new Bar();
print
$bar->fooStatic() . "\n";
?>

A saída do exemplo acima no PHP 8 é semelhante a:

 foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo 
To Top