Palavra-Chave 'static'

Tip

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.

Warning

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.

Example #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).

Example #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