Estático
En esta página
Estático#
[!TIP] Esta página describe el uso de la palabra clave
staticque permite definir métodos y propiedades estáticas.statictambié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 destatic.
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.
[!WARNING] 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 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 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";
?>
Resultado 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