Clases y Objetos
PHP Manual

La palabra clave 'static'

Sugerencia

Esta página describe el uso de la palabra clave static para definir métodos y propiedades estáticos. static también se puede usar para definir variables estáticas y para enlaces estáticos en tiempo de ejecución. Por favor, consulte estas páginas para más información sobre estos significados de static.

Declarar propiedades o métodos de clases como estáticos los hacen accesibles sin la necesidad de instanciar la clase. Una propiedad declarada como static no puede ser accedida con un objeto de clase instanciado (aunque un método estático sí lo puede hacer).

Por motivos de compatibilidad con PHP 4, si no se utiliza ninguna declaración de visibilidad, se tratará a las propiedades o métodos como si hubiesen sido definidos como public.

Debido a que los métodos estáticos se pueden invocar sin tener creada una instancia del objeto, la pseudo-variable $this no está disponible dentro de los métodos declarados como estáticos.

Las propiedades estáticas no pueden ser accedidas a través del objeto utilizando el operador flecha (->).

Invocar métodos no estáticos estáticamente genera una advertencia de nivel E_STRICT.

Como cualquier otra variable estática de PHP, las propiedades estáticas sólo pueden ser inicializadas utilizando un string literal o una constante; las expresiones no están permitidas. Por tanto, se puede inicializar una propiedad estática con enteros o arrays (por ejemplo), pero no se puede hacer con otra variable, con el valor de devolución de una función, o con un objeto.

A partir de PHP 5.3.0, es posible hacer referencia a una clase usando una variable. El valor de la variable no puede ser una palabra clave (p.ej., self, parent y static).

Ejemplo #1 Ejemplo de propiedad estática

<?php
class Foo
{
    public static 
$mi_static 'foo';

    public function 
valorStatic() {
        return 
self::$mi_static;
    }
}

class 
Bar extends Foo
{
    public function 
fooStatic() {
        return 
parent::$mi_static;
    }
}


print 
Foo::$mi_static "\n";

$foo = new Foo();
print 
$foo->valorStatic() . "\n";
print 
$foo->mi_static "\n";      // "Propiedad" mi_static no definida

print $foo::$mi_static "\n";
$nombreClase 'Foo';
print 
$nombreClase::$mi_static "\n"// A partir de PHP 5.3.0

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

Ejemplo #2 Ejemplo de método estático

<?php
class Foo {
    public static function 
unMétodoEstático() {
        
// ...
    
}
}

Foo::unMétodoEstático();
$nombreClase 'Foo';
$nombreClase::unMétodoEstático(); // A partir de PHP 5.3.0
?>

Clases y Objetos
PHP Manual