class Alumno { private $nombre; private $nota; private $apellidos; //Set y get para todas las propiedades. La nota enter 0 y 10 //El resto no vacíos //Función aprobado que nos devuelva true si la nota es >=5 //Función nombre completo que nos devuelva el nombre y el apellido //¿Sería posible hacerlo como propiedad y no como función? //Functión mágica toString que nos devuelva nombre completo y nota function __set($name, $value) { if (property_exists($this, $name)) { if ($name == 'nota') { if ($value >= 0 && $value <= 10) { $this->nota = $value; } else { throw new Exception("La nota debe estar entre 0 y 10"); } } else { if (!empty($value)) { $this->$name = $value; } } } } function aprobado() { return $this->nota >= 5; } function __get($name) { if (property_exists($this, $name)) { return $this->$name; } else { if ($name == "nombreCompleto") { return $this->nombreCompleto(); } } } function nombreCompleto() { return $this->nombre . " " . $this->apellidos; } public function __toString() { return $this->nombreCompleto." - ".$this->nota; } } $ana = new Alumno(); $ana->nombre="Ana"; $ana->apellidos="Pi"; $ana->nota=7; echo $ana->nombreCompleto."<br/>"; echo $ana; ?>