Estático

Sugerencia

Esta página describe el uso de la palabra clave static que permite definir métodos y propiedades estáticas. static también puede ser utilizado para definir variables estáticas, definir funciones anónimas estáticas y para Resoluciones estáticas a la volada. Consulte estas páginas para obtener más información sobre el significado de static.

Declarar propiedades o métodos como estáticos permite acceder a ellos sin necesidad de instanciar la clase. Estos pueden ser accedidos estáticamente desde una instancia de objeto.

Métodos estáticos

Dado que los métodos estáticos pueden ser llamados sin que una instancia de objeto haya sido creada, la pseudo-variable $this no está disponible en los métodos declarados como estáticos.

Advertencia

Llamar a un método no estático estáticamente lanzará una Error.

Anterior a PHP 8.0.0, llamar a un método no estático estáticamente era obsoleto, y generaba un aviso E_DEPRECATED.

Ejemplo #1 Ejemplo con un método estático

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

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

Propiedades estáticas

Las propiedades estáticas son accedidas utilizando el operador de resolución de ámbito (::) y no pueden ser accedidas a través del operador objeto (->).

Es posible referenciar la clase utilizando una variable. El valor de la variable no puede ser una palabra clave (por ejemplo self, parent y static).

Ejemplo #2 Ejemplo con una propiedad 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"; // "Propiedad" my_static no definida

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

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

Salida del ejemplo anterior en PHP 8 es similar 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