Saltar a contenido

Encapsulación

Las propiedades se definen privadas o protegidas (privadas si solo la propia clase debe acceder a ellas, protegidas si queremos que las clases heredadas también puedan acceder a ellas).

Para cada propiedad, se añaden métodos públicos (getters y setters):

ejemploencapsulacion.php
public setPropiedad(tipo $param)
public getPropiedad() : tipo

Las constantes se definen públicas para que sean accesibles por todos los recursos.

MayorMenor.php
<?php
class MayorMenor {
    private int $mayor;
    private int $menor;

    public function setMayor(int $may) {
        $this->mayor = $may;
    }

    public function setMenor(int $men) {
        $this->menor = $men;
    }

    public function getMayor() : int {
        return $this->mayor;
    }

    public function getMenor() : int {
        return $this->menor;
    }
}

Recibiendo y enviando objetos

Es recomendable indicarlo en el tipo de parámetro en la definición. Si el objeto puede devolver nulos se pone ? delante del nombre de la clase.

Objetos por referencia

Los objetos que se envían y reciben como parámetros siempre se pasan por referencia.

ejemploobjeto.php
<?php
function maymen(array $numeros){
    $a = max($numeros);
    $b = min($numeros);

    $result = new MayorMenor();
    $result->setMayor($a);
    $result->setMenor($b);

    return $result;
}

$resultado =  maymen([1,76,9,388,41,39,25,97,22]);
echo "<br>Mayor: ".$resultado->getMayor();
echo "<br>Menor: ".$resultado->getMenor();

? y nulo

Si en el ejemplo anterior queremos que uno de los valores pueda ser nulo, usaremos ?. Esta línea define una función en PHP con tipado estricto:

function maymen(array $numeros) : ? MayorMenor { ...}
  • function maymen(...): define una función llamada maymen.
  • (array $numeros): la función espera un parámetro llamado $numeros, que debe ser un array. Gracias al tipado, PHP lanzará un error si se le pasa algo que no sea un array.
  • : ?MayorMenor: esto indica el tipo de retorno de la función. En este caso, puede devolver una instancia de la clase MayorMenor o null.

En resumen

El símbolo ? delante del tipo significa que el valor de retorno puede ser de ese tipo o null. Es decir, la función puede devolver un objeto de tipo, o no devolver nada (en cuyo caso sería null).

Actividades

  • 📝 AC 301. (RA3 / CE3d / IC1 / 3p) - Se solicita crear una clase Empleado con su nombre, apellidos y sueldo. Encapsula las propiedades mediante getters/setters y ha de contener métodos para:

    • Obtener su nombre completo getNombreCompleto(): string
    • Que devuelva un booleano indicando si debe o no pagar impuestos (se pagan cuando el sueldo es superior a 3333€) debePagarImpuestos(): bool
  • 📝 AC 302. (RA3 / CE3b CE3c CE3d / IC1 / 3p) - Se ha de modificar la clase del ejercicio anterior para añadir una propiedad privada que almacene un array de números de teléfonos. Implementa los siguientes métodos:

    • public function anyadirTelefono(int $telefono) : void Añade un teléfono al array
    • public function listarTelefonos(): string Muestra los teléfonos separados por comas
    • public function vaciarTelefonos(): void Elimina todos los teléfonos