30. Propiedades y métodos estáticos en una clase PHP

En PHP podemos declarar funciones de una clase que no utilicen propiedades o métodos de la misma. Dichos métodos, por ejm, podrían calcular valores numéricos, hacer conexión a una base de datos o comprobar que un correo electrónico esté bien definido, la cuestión es que estos métodos no van a utilizar ninguna propiedad ni ningún otro método de la clase. Dichos métodos es posible manejarlos sin la necesidad de instanciar a una clase. Para ello, estos métodos se han de declarar como estáticos, y para ello se utiliza la palabra reservada static delante del método que deseemos declarar como estático.

Ejm

<?php

  class Humano {
    public static function saludar(){
      echo 'Hola Mundo';
    }
  }

  Humano::saludar();

 

Como podemos ver, para llamar a los métodos estáticos se llama al nombre de la clase seguida de '::' y el método estático.

Los métodos no son lo único que podemos declarar como estático, también podemos declarar propiedades estáticas.

Ejm

<?php

  class Humano {
    public static $nombre = "Francisco Paredes";

    public static function saludar(){
      echo 'Hola Mundo';
    }
  }

  Humano::saludar();

  echo "<br />";

  echo Humano::$nombre;

 

Llamar a propiedades estáticas dentro de un método de la clase

Para ello vamos a hacer uso de la palabra reservada self seguida de dos dobles puntos (::), como en el ejm siguiente.

Ejm

<?php

  class Humano {
    public static $nombre = "Francisco Paredes";

    public static function saludar(){
      echo 'Hola Mundo';
    }

    public function saludoPersonalizado(){
      echo "Hola " . self::$nombre;
    }
  }

  Humano::saludar();
  echo "<br />";
  echo Humano::$nombre;
  echo "<br />";


  $humano = new Humano;
  $humano->saludoPersonalizado();

 

Clases hijas

Para llamar a propiedades estáticas de una clase padre se utiliza la palabra reservada parent, seguida de dos punto dobles, como en el siguiente ejm.

Ejm

<?php

  class Humano {
    public static $nombre = "Francisco Paredes";

    public static function saludar(){
      echo 'Hola Mundo';
    }

    public function saludoPersonalizado(){
      echo "Hola " . self::$nombre;
    }
  }

  class Peruano extends Humano {
    public function saludoPeruano(){
      echo "Hola desde Perú, le saluda " . parent::$nombre;
    }
  }

  Humano::saludar();
  echo "<br />";
  echo Humano::$nombre;
  echo "<br />";
 
  $humano = new Humano;
  $humano->saludoPersonalizado();

  echo "<br />";

  $peruano = new Peruano;
  $peruano->saludoPeruano();