- POO: Finalidad de la herencia y conceptos básicos
- POO en PHP: Propiedades y métodos estáticos
- POO en PHP: Ámbito de propiedades y métodos
- POO en PHP: Propiedades de una clase
- POO en PHP: Métodos en las clases
- Programación orientada a objetos en PHP: Introducción
- Programación orientada a objetos en PHP: Clases y objetos
La mayor parte de métodos y datos se aplican a las instancias de una clase. Es decir, tienes que crear un objeto para poder usarlos. En estos casos que hemos empleado una clase Usuario y puede darse el caso de hacer una comprobación de contraseña o saber cuál es el correo del usuario. Para ello se emplean operaciones a cada usuario con su respectiva instancia. Esto es algo que cambia completamente si usamos propiedades y métodos estáticos.
En el caso de querer mantener datos de una clase entera, puedes usar variables que almacenen un dato deseado y se apliquen a toda una clase. Para ello PHP proporciona la propiedad static para crear propiedades y métodos estáticos.Basicamente esto viene a decir que podemos acceder a miembros de una clase sin necesidad de instanciar o crear un objeto con ella. Sin embargo, una propiedad declarada como static no puede accederse a ella directamente dentro de una instancia de una clase pero un método si puede.
Ejemplo de propiedades y métodos estáticos
Supongamos que tenemos una clase llamada prueba. En ella habra una propiedad y un método estáticos. Voy a acceder tanto al método como la propiedad directamente sin instanciar.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
$prueba = new Prueba(); echo "Acceder a la propiedad de una clase: " . Prueba::$propiedad_estatica . "<br>"; echo "Método de una clase instanciada: " . $prueba->get_variable(). "<br>"; echo "Propiedad de una clase instanciada: <br>" . $prueba->static_property . "<br>"; echo "Ejemplo método estático: <br>" . Prueba::hola_mundo(); class Prueba { static $propiedad_estatica = "Soy estático"; function get_variable() { return self::$propiedad_estatica; } static function hola_mundo() { return 'Hola mundo!'; } } |
En este ejemplo se puede observar que se pueden acceder a métodos y propiedades estáticas directamente sin instanciar la clase Prueba, sólo basta con Prueba:: y la propiedad o función que deseas llamar. Sin embargo, si instanciamos la clase y queremos acceder a la variable a través del objeto, no podremos y sólo será posible usando un método. Dicho método emplea self:: para referirse que la propiedad está en esa clase, es equivalente al this.
Hemos comprobado que podemos acceder a la propiedad de la clase sin instanciar pero, seríamos capaces de modificarlo? Sí, es posible
1 2 |
Prueba::$propiedad_estatica = "Modificado"; echo "Propiedad modificada: " . Prueba::$propiedad_estatica . "<br>"; |
Os debería de mostrar «Modificado» quedando claro que se puede modificar la propiedad estática de una clase. Sin embargo, ten en cuenta que dicho valor se mostrará para todos. Esto quiere decir que si tienes un objeto instanciado con esa clase y modificas la propiedad estática, dicho valor será igual tanto para el objeto actual como los futuros objetos que instancies.
Y hasta aquí propiedades y métodos estáticos, espero que le saquéis partido. A seguir picando y buen finde! 🙂