Self VS. esto en PHP
- 1695
- 203
- Florencia Galindo
PHP admite clases y otras construcciones orientadas a objetos. Las funciones y variables estáticas en las clases de PHP no están asociadas con ninguna instancia específica de la clase (en otras palabras, un objeto). Ver diferencia entre objeto y clase.
En cambio, las funciones y variables estáticas están asociadas con la definición de clase misma. En otras palabras, todas las instancias de una clase comparten la misma variable estática. Dentro del contexto de un método (función) de una clase, se accede a variables y funciones estáticas utilizando ser::
. Otros métodos y variables se utilizan en el contexto de un objeto (una instancia) de una clase, utilizando esto->
.
Cuadro comparativo
ser | este | |
---|---|---|
Se puede usar en funciones estáticas | Sí | No |
variable de clase accesible y métodos con | ser:: | $ this-> (tenga en cuenta que php> 5.3 permite el uso de $ esto con variables estáticas use $ this :: $ foo. $ this-> foo seguirá sin definir si $ foo es una var estática.) |
Necesita un objeto instanciado | No | Sí |
Self VS esto en PHP - Ejemplos
clase EjemplClass public static $ foo; público $ bar; función pública regularfunction () echo $ this-> bar; función estática pública staticFunction () echo self :: $ foo; función estática pública anotherStatfn () self :: staticFunction (); función pública regularfnusingstaticvar () echo self :: $ foo; // Nota: a partir de Php 5.3 Usando $ this :: $ bar en lugar de self :: $ bar está permitido EjemplecLass :: $ foo = "hola"; $ obj = new ExpplecLass (); $ obj-> bar = "mundo!"; ExpplecLass :: staticFunction (); /* Imprime hola* /$ obj-> regularfunction (); /* imprime mundo! */
Las funciones estáticas solo pueden usar variables estáticas. Las funciones y variables estáticas se hacen referencia a través de ser::functionName () o ser::nombre de la variable. En el ejemplo mostrado anteriormente, las variables estáticas se hacen referencia con el nombre de la clase (EjemplecLass :: $ foo) o, con un ser:: (self :: $ foo) cuando se usa dentro del método estático [llamado staticfunction ()] de la clase.
Las funciones y variables regulares de una clase necesitan que se haga referencia a un contexto de objeto. No pueden existir sin un contexto de objeto. El contexto del objeto se proporciona por $ esto. En el ejemplo anterior, $ Bar es una variable regular y, por lo tanto, se hace referencia como $ obj-> bar (en el contexto del objeto con variable obj) o como $ this-> bar (nuevamente en un contexto de objeto dentro de un método de un objeto).
ser no usa un anterior ps porque ser no connota una variable pero la clase se construye en sí misma. $ esto hace referencia a una variable específica para que tenga un anterior ps.