Palavra-Chave 'static'
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.
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