Soy diseñadora web y (loca de mí) me he metido a un curso de experto universitario de desarrollo de aplicaciones web, y me estoy volviendo loca con un problema de POO, a ver si me podéis ayudar!
Estoy con las clases, de una clase Articulo a una clase hijo ArticuloRebajado. Todo va bien, pero hay que hacer una funcion privada llamada calculoDescuento (el precio del articulo * rebaja / 100) y que luego, en el __tooString se vea a través de self::
(Espero haberme explicado bien )
He probado mil maneras diferentes pero no lo consigo y ya es cuestión de estar hasta las ... en fin. Supongo que tengo la mitad del código mal puesto.
Este es el código:
Código PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<?php
function __autoload($Articulo) {
$file = 'class.articulo.php';
if (file_exists($file)) require_once $file;
}
final class ArticuloRebajado extends Articulo
{
// Definimos el atributo que falta
protected $rebaja;
protected $rebajafinal;
public function getRebaja(){
return $this->rebaja;
}
public function setRebaja($pRebaja){
if(is_numeric($pRebaja)) { $this->rebaja = $pRebaja; }
else { die($pRebaja . ' NO es un numero');}
}
// Se añade el constructor llamando al constructor de Articulo (padre)
// para ello usar el parent::
public function __construct($pNombre,$pPrecio,$pRebaja,$pRebajaFinal) {
$this->rebajafinal = $pRebajaFinal;
$this->setRebaja($pRebaja);
//// lanzamos el constructor de la clase base articulo
parent::__construct($pNombre, $pPrecio);
return true;
}
private function calculaDescuento($pRebajaFinal){
self::$rebajafinal = $pRebajaFinal ;
$pRebajaFinal = ($this->precio)*($this->rebaja)/100;
}
public function __toString()
{
// llamamos al toString del padre (parent::)
$vista = parent::__toString();
$vista .= 'La rebaja es del : ' . $this->rebaja . ' %<br>';
$vista .= 'El descuento es de: ' . self::calculaDescuento() . ' €.';
return $vista;
}
//esta llave lo cierra todo
}
$objeto = new ArticuloRebajado("Bicicleta", 352.10, 20);
echo $objeto;
?>
</body>
</html>