Hola,
En el ejemplo que has compartido con nosotros, podrías usar la construcción `return' dentro de la función calculo() de la clase Figura para lograr el efecto que creo que buscas.
Código:
<?php
class Figura
{
function calculo($obj)
{ return $obj->area (); }
}
class Rectangulo
{
function area()
{ return 'Calculo del area de un rectangulo'; }
}
class Circulo
{
function area()
{ return 'Calculo del area de un circulo'; }
}
$f = new Figura;
$r = new Rectangulo;
$c = new Circulo;
echo $f->calculo ($c);
?>
Aunque, como verás, en este ejemplo no se aprecia una de las características típicas del polimorfismo (al menos aquello que conocen como polimorfismo los programadores de C++, por ejemplo), y es el polimorfismo en objetos que son instancias de clases que heredan funcionalidad de una clase padre.
En realidad, en lenguajes que no son "fuertemente tipados", el concepto de polimorfismo resulta mucho más natural debido a la flexibilidad misma que ofrece el hecho de contar con variables sin tipos rígidos.
Una ejemplo clásico de polimorfismo en PHP podría ser el siguiente:
Código:
<?php
class Figura
{
function area()
{ return 'Calculo del area de una figura cualquiera'; }
}
class Rectangulo extends Figura
{
function area()
{ return 'Calculo del area de un rectangulo'; }
}
class Circulo extends Figura
{
function area()
{ return 'Calculo del area de un circulo'; }
}
class Triangulo extends Figura
{
// Notese que esta clase no redefine la funcion area()
}
function calcular_area ($obj)
{
return $obj->area ();
}
$f = new Figura;
$r = new Rectangulo;
$c = new Circulo;
$t = new Triangulo;
echo calcular_area ($f) . ' - ' .
calcular_area ($r) . ' - ' .
calcular_area ($c) . ' - ' .
calcular_area ($t);
?>
Es un ejemplo extremadamante simple, claro está, pero permite apreciar el modo en que las referencias operan como es de esperarse. También es una muestra de la simplicidad proveniente de los tipos de datos (o la falta misma de éstos) en PHP.
Este mismo ejemplo en lenguajes como C++ requeriría que la función calcular_area() recibiera una referencia a un objeto del tipo de la clase padre, y se necesitaría del uso de funciones virtuales, un requerimiento inexistente en lenguajes como PHP, por ejemplo.
Un cordial saludo