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();