Práctica 207. Clases en PHP.
Ejercicio 1. Empleado.
Crea una clase Empleado en un fichero Empleado.php con su nombre, apellidos y sueldo.
Encapsula las propiedades mediante getters/setters y añade métodos para:
getNombreCompleto(): string: Obtener su nombre completo.debePagarImpuestos(): bool: Devuelve un booleano indicando si debe o no pagar impuestos (se pagan cuando el sueldo es superior a 3333 EUR).
Ejercicio 2. Empleado con teléfonos.
Copia la clase del ejercicio anterior y modifícala. Cambia el nombre del fichero a EmpleadoTelefonos.php.
Añade una propiedad privada que almacene un array de números de teléfonos.
Añade 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.
Ejercicio 3. Empleado con constructor.
Duplica el fichero del ejercicio anterior y cámbiale el nombre a EmpleadoConstructor.php.
Elimina los setters de nombre y apellidos, de manera que dichos datos se asignan mediante el constructor (utiliza la sintaxis de PHP7).
Si el constructor recibe un tercer parámetro, será el sueldo del Empleado. Si no, se le asignará 1000 EUR como sueldo inicial.
Duplica de nuevo el fichero y cámbiale el nombre a EmpleadoConstructorPHP8.php. Modifica la clase y utiliza la sintaxis de PHP 8 de promoción de las propiedades del constructor.
Ejercicio 4. Empleado con constante.
Copia la clase del ejercicio anterior y modifícala. Cambia el nombre a EmpleadoConstante.php.
Añade una constante SUELDO_TOPE con el valor del sueldo que debe pagar impuestos, y modifica el código para utilizar la constante.
Ejercicio 5. Empleado con atributo estática.
Duplica el fichero del ejercicio anterior y cámbiale el nombre a EmpleadoSueldo.php.
Cambia la constante por un atributo estática sueldoTope, de manera que mediante getter/setter puedas modificar su valor.
Ejercicio 6. Crear un HTML a partir de un objeto.
Copia la clase del ejercicio anterior y modifícala. Cambia el nombre a EmpleadoStatic.php.
Completa 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, deberás crear un getter para los teléfonos):
public static function toHtml(Empleado $emp): string
Ejercicio 7. Herencia de Empleado.
Copia la clase del ejercicio anterior en Empleado.php.
Crea un fichero Persona.php para una clase Persona que sea padre de Empleado, de manera que Persona contenga el nombre y los apellidos, y en Empleado quede el salario y los teléfonos.
Ejercicio 8. Métodos en la herencia.
Copia las clases del ejercicio anterior y renombra Persona.php por PersonaH.php.
En la clase Persona, crea el método estático toHtml(Persona $p), y modifica en Empleado el mismo método toHtml(Persona $p), pero cambia la firma para que reciba una Persona como parámetro.
Para acceder a las propiedades del empleado con la persona que recibimos como parámetro, comprobaremos su tipo:
<?php
class Empleado extends Persona {
/// resto del código
public static function toHtml(Persona $p): string {
if ($p instanceof Empleado) {
// Aqui ya podemos acceder a las propiedades y métodos de Empleado
}
}
}
?>
Ejercicio 9. Edad de un persona.
Copia las clases del ejercicio anterior y renombra PersonaE.php por PersonaH.php.
En la clase Persona, añade un atributo edad. A la hora de saber si un empleado debe pagar impuestos, lo hará siempre y cuando tenga más de 21 años y dependa del valor de su sueldo.
Modifica todo el código necesario para mostrar y/o editar la edad cuando sea necesario.
Ejercicio 10. Representación de los objetos.
Copia las clases del ejercicio anterior y renombra PersonaH.php por PersonaS.php.
Añade nuevos métodos que hagan una representación de todas las propiedades de las clases Persona y Empleado, de forma similar a los realizados en HTML, pero sin que sean estáticos, de manera que obtenga los datos mediante $this.
Ejercicio 11. Clase abstracta.
Copia las clases del ejercicio anterior y renombra PersonaS.php por PersonaA.php.
Transforma Persona a una clase abstracta donde su método estático toHtml(Persona $p) tenga que ser redefinido en todos sus hijos.
Ejercicio 12. Empleados, trabajadores y gerentes.
Realiza los siguientes pasos:
- Copia las clases del ejercicio anterior.
- Crea dos nuevos ficheros:
Trabajador.phpyGerente.php. - Cambia la estructura de clases conforme al gráfico respetando todos los métodos que ya están hechos.
- La clase
Trabajadores una clase abstracta que ahora almacena lostelefonosy dondecalcularSueldoes un método abstracto de manera que:- El sueldo de un empleado se calcula a partir de las horas trabajadas y lo que cobra por hora.
- Para los gerentes, su sueldo se incrementa porcentualmente en base a su edad:
salario + salario * edad / 100.
Ejercicio 13. Empresa con empleados, trabajadores y gerentes.
Realiza los siguientes pasos:
- Copia las clases del ejercicio anterior.
- Crea un fichero
Empresa.phpcon una claseEmpresaque además del nombre y la dirección, contenga una propiedad con un array de trabajadores (Trabajador), ya sean empleados (Empleado) o gerentes (Gerente). - Añade getters/setters para el nombre y dirección.
- Añade métodos para añadir y listar los trabajadores.
public function anyadirTrabajador(Trabajador $t)public function listarTrabajadoresHtml() : string: utilizaTrabajador::toHtml(Persona $p)
- Añade un método para obtener el coste total en nóminas.
public function getCosteNominas(): float: recorre los trabajadores e invoca al métodocalcularSueldo().
Ejercicio 14. Serialización de objetos.
Copia las clases del ejercicio anterior. Cambia el nombre de Empresa.php por EmpresaI.php.
Crea un interfaz JSerializable, de manera que ofrezca los métodos:
toJSON(): string: utiliza la funciónjson_encode(mixed). Ten en cuenta que, como tenemos las propiedades de los objetos privados, debes recorrer las propiedades y colocarlas en array asociativo.toSerialize(): string: utiliza la funciónserialize(mixed).
Modifica todas las clases que no son abstractas para que implementen la interfaz creada.