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,
$this
no está disponible en un contexto estático ($this
no 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
$this
suministra 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_STRICT
el primer ejemplo genera una advertencia.fuente
$this
refiere 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
$this
operador para trabajar en funciones de clase. Entonces no pude encontrar una diferencia en ellos todavía. :(fuente