Tengo una pregunta sobre la función estática en php.
supongamos que tengo una clase
class test {
    public function sayHi() {
        echo 'hi';
    }
}si lo hago test::sayHi();funciona sin problema.
class test {
    public static function sayHi() {
        echo 'hi';
    }
}test::sayHi(); también funciona.
¿Cuáles son las diferencias entre primera y segunda clase?
¿Qué tiene de especial una función estática?

Respuestas:
En la primera clase,
sayHi()es en realidad un método de instancia al que está llamando como un método estático y se sale con la suya porquesayHi()nunca se refiere a$this.Las funciones estáticas están asociadas con la clase, no una instancia de la clase. Como tal,
$thisno está disponible en un contexto estático ($thisno apunta a ningún objeto).fuente
Simplemente, las funciones estáticas funcionan independientemente de la clase a la que pertenecen.
$ esto significa que este es un objeto de esta clase. No se aplica a funciones estáticas.
fuente
Toda la diferencia es que no se
$thissuministra dentro de la función estática. Si intenta usar$this, obtendrá unFatal error: Using $this when not in object context.Bueno, está bien, otra diferencia:
E_STRICTel primer ejemplo genera una advertencia.fuente
$thisrefiere al objeto actual. En una función estática, no hay ningún objeto actual; la función existe en la clase sin necesidad ni referencia a una instancia de objeto de esa clase.Llamar a métodos no estáticos genera estáticamente una advertencia de nivel E_STRICT.
fuente
En pocas palabras, no tiene el objeto como $ this en el segundo caso, ya que el método estático es una función / método de la clase, no la instancia del objeto.
fuente
Después de probar ejemplos (PHP 5.3.5), descubrí que en ambos casos de definir funciones no se puede usar el
$thisoperador para trabajar en funciones de clase. Entonces no pude encontrar una diferencia en ellos todavía. :(fuente