Hola gente, arme este humilde script que utiliza la herencia de una clase generica llamada polimorfismo para realizar este proceso y lo comparto por si alguien le interesa.
se puede sobrecargar por cantidad de argumentos, por cantidad y tipo, por cantidad, tipo y clase (si el parametro es un objeto).
aqui el codigo:
Código PHP:
Ver original<?php
// Clase padre heredable, es la que realiza la emulacion.
class polimorfismo
{
/*
* @param string $metodo El nombre del metodo que se va a sobrecargar.
* @param array $params Los parametros con los que se llamo el metodo.
* @param bool $tipado Indica si se va a discriminar por el tipo de los argumentos.
* @param bool $instanciado Indica si se va a discriminar por el tipo de clase de los parametros (cuando sea un objeto).
*/
protected function chk_polimorfismo($metodo, $params, $tipado = false, $instanciado = false)
{
$metodo .= count($params); if($tipado && $params)
{
foreach($params as $param)
}
}
}
// Las clases que emulen el polimorfismo deben heredar.
class test_polimorfico extends polimorfismo
{
// Al metodo publico a sobrecargar, se le asigna la llamada al metodo protected de la clase emuladora.
public function sobrecargado
() { $this->chk_polimorfismo('test', func_get_args(), true); }
// Se crean los metodos protected que seran llamados por la sobrecarga.
// Se los pone como protected para que no sean vistos desde afuera y simulen un polimorfismo mas clasico.
protected function test0() // 0 argumentos.
{
echo('<br>Hola, no me pasaron ningun parametro.');
}
protected function test1_string($string) // Un argumento, de tipo string
{
echo('<br>Hola, me pasaste este string: '.$string);
}
protected function test1_integer($integer) // Un argumento, de tipo integer
{
echo('<br>Hola, me pasaste este integer: '.$integer);
}
protected function test2_integer_string($integer, $string)
{
echo('<br>Hola, me pasaste este integer: '.$integer.' y este string: '.$string);
}
protected function test2_string_integer($string, $integer)
{
echo('<br>Hola, me pasaste este string: '.$integer.' y este integer: '.$string);
}
}
$test = new test_polimorfico();
$test->sobrecargado();
$test->sobrecargado('prueba');
$test->sobrecargado(5);
$test->sobrecargado(5, 'prueba');
$test->sobrecargado('prueba', 5);
$test->sobrecargado('2');