Saltar a contenido

Clases Estáticas

Son aquellas que tienen propiedades y/o métodos estáticos (también se conocen como de clase, porque su valor se comparte entre todas las instancias de la misma clase).

Se declaran con static y se referencian con ::.

  • Si queremos acceder a un método estático, se antepone el nombre de la clase: Producto::nuevoProducto().
  • Si desde un método queremos acceder a una propiedad estática de la misma clase, se utiliza la referencia self: self::$numProductos
producto.php
<?php
class Producto {
    const IVA = 0.23;
    private static $numProductos = 0; 

    public static function nuevoProducto() {
        self::$numProductos++;
    }
}

Producto::nuevoProducto();
$impuesto = Producto::IVA;

También podemos tener clases normales que tengan alguna propiedad estática:

producto.php
<?php
class Producto { 
    const IVA = 0.23;
    private static $numProductos = 0; 
    private $codigo;

    public function __construct(string $cod) { 
        self::$numProductos++;
        $this->codigo = $cod;
    }

    public function mostrarResumen() : string { 
        return "El producto " . $this->codigo . " es el número " . self::$numProductos; 
    }
}

$prod1 = new Producto("PS5");
$prod2 = new Producto("XBOX Series X");
$prod3 = new Producto("Nintendo Switch");
echo $prod3->mostrarResumen();

Actividades

  • 📝 AC 305. (RA3 / CE3b CE3c CE3d / IC1 / 3p) - Se ha de modificar la clase de la actividad AC303. Además, se ha de añadir una constante SUELDO_TOPE con el valor del sueldo que debe pagar impuestos, y modificar el código para utilizar la constante. No olvides añadirle el constructor.

  • ⚓ AR 306. (RA3 / CE3b CE3c CE3d CE3g / IC1 / 3p) - Existe la necesidad de realizar mejoras en AC305. Se ha de cambiar la constante por una variable estática sueldoTope, de manera que mediante getter/setter se pueda modificar su valor.

  • 📝 AC 307. (RA3 / CE3b CE3c CE3d / IC1 / 3p) - Se necesita seguir con las mejoras en AC305. Se ha de implementar el siguiente método con una cadena HTML que muestre los datos de un empleado dentro de un párrafo y todos los teléfonos mediante una lista ordenada (para ello, se deberá crear un getter para los teléfonos):

    • public static function toHtml(Empleado $emp): string