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.
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.
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();
?>
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