función estática php
Pregunta
Tengo una pregunta con respecto a la función estática en php.
Supongamos que tengo una clase
class test {
public function sayHi() {
echo 'hi';
}
}
si yo test::sayHi();
funciona sin ningún problema.
class test {
public static function sayHi() {
echo 'hi';
}
}
test::sayHi();
funciona tan bien.
¿Cuáles son las diferencias entre la primera clase y segunda clase?
Lo que es especial acerca de una función estática?
Solución
En la primera clase, sayHi()
es en realidad un método de instancia que realiza la llamada como un método estático y se obtiene con la suya porque nunca se refiere a sayHi()
$this
.
funciones estáticas están asociados con la clase, no una instancia de la clase. Como tal, $this
no está disponible desde un contexto estático ($this
no está apuntando a cualquier objeto).
Otros consejos
Simplemente, funciones estáticas funcionan independientemente de la clase a la que pertenecen.
$ este medio, se trata de un objeto de esta clase. No se aplica a las funciones estáticas.
class test {
public function sayHi($hi = "Hi") {
$this->hi = $hi;
return $this->hi;
}
}
class test1 {
public static function sayHi($hi) {
$hi = "Hi";
return $hi;
}
}
// Test
$mytest = new test();
print $mytest->sayHi('hello'); // returns 'hello'
print test1::sayHi('hello'); // returns 'Hi'
diferencia en todo, usted no recibe $this
suministrado dentro de la función estática. Si intenta utilizar $this
, obtendrá un Fatal error: Using $this when not in object context
.
Bueno, está bien, otra diferencia:. E_STRICT
una advertencia es generada por el primer ejemplo
Llamar a métodos no estáticos estáticamente genera un aviso de nivel de E_STRICT.
En pocas palabras, usted no tiene el objeto como $ presente en el segundo caso, como se el método estático es una función / método de la clase no la instancia de objeto.
Después de probar los ejemplos (PHP 5.3.5), encontré que en ambos casos de funciones que definen no se puede utilizar el operador $this
para trabajar en funciones de clase. Así que no podía encontrar una diferencia en ellos todavía. : (