martes, 28 de octubre de 2014

PHP (07) POO (09) Métodos estáticos (03) Propiedades en métodos estáticos

Se pueden emplear propiedades trabajando con la clase en código y no con un objeto, siempre que estas propiedades sean estáticas.
Para ello lo único que hay que hacer es declarar la propiedad como estática, y un método set publico y estático.
<?php
 class Matematica
 {
  static $dato;

  public static function set_dato($valor)
  {
  ... 
  }
 }

?>

De este modo se pueden almacenar datos en $dato, pero no podemos utilizar $this-> ya que no tenemos un objeto de la clase, pero eso PHP lo solventa con la palabra reservada self, que se utiliza para trabajar con métodos y propiedades estáticos.
Su uso quedaría así:
<?php
 class Matematica
 {
  static $dato;

  public static function set_dato($valor)
  {
   self::$dato = $valor;
  }
 }

?>

De esta forma ya tenemos nuestro dato guardado, y para usarlo se hace utilizando la expresión self::$dato como vemos a continuación:
<?php
 class Matematica
 {
  static $dato;

  public static function set_dato($valor)
  {
   self::$dato = $valor;
   echo '<p>mostrando self::$dato = ' . self::$dato . '<p>';
  }
 }

 Matematica::set_dato(6);

?>

Lo cual nos da como resultado:
mostrando self::$dato = 6

Pero puede resultar tedioso estar todo el tiempo utilizando la secuencia del self, de modo que se puede guardar como si de una variable se tratase, y trabajar con ella de la forma habitual:
<?php
 class Matematica
 {
  static $dato;

  public static function set_dato($valor)
  {
   self::$dato = $valor;
   echo '<p>mostrando self::$dato = ' . self::$dato . '<p>';
   $numero = self::$dato;
   echo '<p><b>Ahora $numero es self::$dato = </b>' . $numero . '</p>';
   $cuadrado = $numero * $numero;
   echo '<p>' . $numero . '<sup>2</sup> = ' . $cuadrado . '</p>';
  }
 }

 Matematica::set_dato(6);

?>

En este caso hemos guardado el valor dentro de de una variable llamada $cuadrado, con la cual hemos hecho un cálculo y nos da como resultado:
mostrando self::$dato = 6
Ahora $numero es self::$dato = 6
62 = 36

No hay comentarios:

Publicar un comentario