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):
public setPropiedad(tipo $param)
public getPropiedad() : tipo
Las constantes se definen públicas para que sean accesibles por todos los recursos.
<?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.
<?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 llamadamaymen
.(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 claseMayorMenor
onull
.
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 mediantegetters/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
- Obtener su nombre completo
-
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 arraypublic function listarTelefonos(): string
Muestra los teléfonos separados por comaspublic function vaciarTelefonos(): void
Elimina todos los teléfonos