Ver Mensaje Individual
  #1 (permalink)  
Antiguo 11/03/2014, 23:25
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 7 meses
Puntos: 320
APORTE: Emular polimorfismo y sobrecarga tipada de forma simple.

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
  1. <?php
  2.  // Clase padre heredable, es la que realiza la emulacion.
  3.  class polimorfismo
  4.  {
  5.     /*
  6.      * @param string $metodo        El nombre del metodo que se va a sobrecargar.
  7.      * @param array  $params        Los parametros con los que se llamo el metodo.
  8.      * @param bool   $tipado        Indica si se va a discriminar por el tipo de los argumentos.
  9.      * @param bool   $instanciado   Indica si se va a discriminar por el tipo de clase de los parametros (cuando sea un objeto).
  10.     */
  11.     protected function chk_polimorfismo($metodo, $params, $tipado = false, $instanciado = false)
  12.     {
  13.         $metodo .= count($params);
  14.         if($tipado && $params)
  15.         {
  16.             foreach($params as $param)
  17.                 $metodo .= '_'.(gettype($param) == 'object' ? ($instanciado ? get_class($param) : 'object') : gettype($param));
  18.         }
  19.        
  20.         if(method_exists($this, $metodo))
  21.             call_user_func_array(array($this,$metodo),$params);
  22.     }  
  23.  }
  24.  
  25.  // Las clases que emulen el polimorfismo deben heredar.
  26.  class test_polimorfico extends polimorfismo
  27.  {
  28.     // Al metodo publico a sobrecargar, se le asigna la llamada al metodo protected de la clase emuladora.
  29.     public function sobrecargado() { $this->chk_polimorfismo('test', func_get_args(), true); } 
  30.    
  31.     // Se crean los metodos protected que seran llamados por la sobrecarga.
  32.     // Se los pone como protected para que no sean vistos desde afuera y simulen un polimorfismo mas clasico.
  33.     protected function test0() // 0 argumentos.
  34.     {
  35.         echo('<br>Hola, no me pasaron ningun parametro.');
  36.     }
  37.    
  38.     protected function test1_string($string) // Un argumento, de tipo string
  39.     {
  40.         echo('<br>Hola, me pasaste este string: '.$string);
  41.     }
  42.    
  43.     protected function test1_integer($integer) // Un argumento, de tipo integer
  44.     {
  45.         echo('<br>Hola, me pasaste este integer: '.$integer);
  46.     }
  47.    
  48.     protected function test2_integer_string($integer, $string)
  49.     {
  50.         echo('<br>Hola, me pasaste este integer: '.$integer.' y este string: '.$string);
  51.     }
  52.    
  53.     protected function test2_string_integer($string, $integer)
  54.     {
  55.         echo('<br>Hola, me pasaste este string: '.$integer.' y este integer: '.$string);
  56.     }
  57.  }
  58.  
  59.  $test = new test_polimorfico();
  60.  $test->sobrecargado();
  61.  $test->sobrecargado('prueba');
  62.  $test->sobrecargado(5);
  63.  $test->sobrecargado(5, 'prueba');
  64.  $test->sobrecargado('prueba', 5);
  65.  $test->sobrecargado('2');
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios