Después de unos días he entendido los conceptos de Polimorfismo y Sobrecarga en PHP, y me estoy dando cuenta de que las respuestas que me disteis no eran muy buenas, puede que fuera porque quien respondía no sabía exactamente la verdad.
Polimorfismo:
......... Método que ejecuta rutinas diferentes según los atributos sobre los que actúa, es decir, un ,método (POO) o función a la que se le pueden pasar distintos grupos de parámetros tanto en número como en tipo , y según sean estos, hace una cosa u otra.
Sobrecarga:
......N métodos llamados igual (por ejemplo _call) que . actuando sobre el mismo grupo de atributos o parámetros ejecuta rutinas diferentes.
Ejemplo de Polimorfismo:
Código PHP:
Ver original<?php
class poli{
public function ppp()
{
echo "mete algún parámetro macho, de lo contrario no hay nada con lo que trabajar";
}
}
{
}
{
echo "las entradas son números, cuya suma es:";
}
else
{
echo "ERROR, las variables ni son números ni cadenas";
}
}//termina el primer BUCLE
{
}
{
echo "las entradas son números, cuya suma es:";
}
else
{
echo "ERROR, las variables ni son números ni cadenas"."<br>";
}
}//termina el segundo bucle.
echo "CUIDADO RADIOACTIVOMAN El número de parámetros debe ser uno, dos o tres";
echo "<br>";
}//termina el último bucle.
}//termina la función
}//termina la clase
?>
se ejecuta :
Código PHP:
Ver original<html>
<head>
<title>polimorfismo</title>
</head>
<body>
<?php
require_once('polimorfismo1.php');
$ob=new poli();
$ob->ppp("Hola me llamo Anita");
$ob->ppp(2.4);
$ob->ppp(3,2);
$ob->ppp("4","6");
$ob->ppp(4.4,6.7);
$ob->ppp(4,3,7);
$ob->ppp(4,5,6,7);
$ob->ppp(true,false);
$obect->ppp("2","hola");
?>
</body>
</html>
dependiendo del número de de parámetros hace una u otra cosa, y si el número de parámetros es igual pero de distinto tipo, también ejecutra rutinas diferentes.
Ejemplo de Sobrecarga conmétodo _call, (ejemplo sacado de Internet, enhorabuena a Carlos Gil Luna por su excelente ejemplo).
Código PHP:
Ver original<?php
class cochecito{
private $marca ;
private $color ;
private $pais ;
private $potencia;
private $vmax;
private $precio;
function __call($method, $arguments) {
return;
}
if ($prefix == "get" && isset($this->$property)) { return $this->$property;
}
if ($prefix == "set") {
$this->$property = $arguments[0];
}
}//fin del método
} //fin de la clase.
?>
y lo ejecutamos:
Código PHP:
Ver original<?php
require_once('onewhocalls.php');
?>
<html>
<head>
<title>probandometodomagicocall</title>
</head>
<body>
<?php
$one=new cochecito();
$one->setmarca("Ferrari");
$one->setmarca("Porche");
$one->setcolor("rojo");
$one->setprecio("160000/$");
echo "la marca del coche es:"." ".$one->getmarca()."<br>";
echo "el color del coche es:"." ".$one->getcolor()."<br>";
echo "el precio del capricho es:"." ".$one->getprecio()."<br>";
?>
</body>
</html>
no existen los métodos set ni get pero, PHP en vez de dar error, al tener un _call declarado, va allí para ver qué pasa, y lo que pasa es que _Call le impide dar error obligandole a ejecutar una serie de rutinas que, basicamente son que si los tres primeras carácteres del método instanciado (que no existe) empiezan por set me haga un seteo, si empiezan por get y resulta que coincide con alguno de los atributos declarados, me imprima ese atributo, como vemos, N métodos distintos todos llamados _call que actuando sobre los mismos atributos me ejecutan codigos distintos.