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) { 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. // 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');