Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/03/2013, 15:54
jcd
 
Fecha de Ingreso: febrero-2013
Mensajes: 77
Antigüedad: 11 años, 2 meses
Puntos: 0
Sobrecarga en PHP POO

Muy buenas, una vez pido ayuda en este foro que de tanto me ha servido anteriormente.

Primeramente gracias por adelantado para todo aquel que lea esto, que tengo que reconocer que es un poco aburrido y largo.

Esta vez tengo que reconocer que voy más perdido que otras veces, estoy empezando a hacer mis pinitos en POO y no entiendo el concepto de sobrecarga, sé que PHP no soporta la sobrecarga pero puede simularse, entiendo, o eso creo, el concepto de polimorfismo pero la sobrecarga me da problemas.

Quiero generar un método que dependiendo del número de parámetros que le pase me ejecuta uno u otro codigo, y quiero hacer 5 casos, si acepta dos parámetros, me da la suma, si acepta tres el producto, si acepta cuatro la suma 2 a 2 y la división...etc.

pero no entiendo varias cosas:
1) según mi codigo, en realidad estoy haciendo 5 métodos distintos con 5 nombres distinos, cuando lo que quiero es que se llamen igual.

2)se supone que cuando isntancie al método, en ese momento es cuando tengo que pasarle los parámetros, y dependiendo de cuántos sean me hará una u otra cosa.

3) pongo mi codigo, y me salta el siguiente error:
Fatal error: Call to undefined method miclase::metodo() in C:\xampp\htdocs\loader.php on line 47, no sé porque me lo llama comosi fuera estático.

os adjunto el codigo:
Código PHP:
Ver original
  1. <?php
  2. class miclase{
  3. $metodos = array();
  4. public function _call($method_name,$parametros){
  5.  
  6. if(in_array($method_name,$this->metodos)){
  7. if(func_num_args($parametros)==0){
  8. $this-> metodo0;
  9. }
  10. if(func_num_args($parametros)==1){
  11. $this-> metodo1;
  12. }
  13. if(func_num_args($parametros)==2){
  14. $this-> metodo2;
  15. }
  16. if(func_num_args($parametros)==3){
  17. $this-> metodo3;
  18. }
  19. if(func_num_args($parametros)==4){
  20. $this-> metodo4;
  21. }
  22. if(func_num_args($parametros)==5){
  23. $this-> metodo5;
  24. }
  25. }
  26.  
  27. else
  28. {
  29. echo "error, no existe el método";}
  30. }
  31. public function metodo1(){
  32. return "hola";}
  33.  
  34. public function metodo2($num1){
  35. return $num1;}
  36.  
  37. public function metodo3($num1,$num2){
  38. return $num1 + $num2;}
  39. public function metodo4($num1,$num2,$num3){
  40. return $num1 * $num2 * $num3;}
  41.  
  42. public function metodo5($num1,$num2,$num3,$num4){
  43. return ($num1 + $num2 )/($num3 + $num4);
  44. }
  45. }
  46. $objeto = new miclase(3,5,6);
  47. $objeto -> metodo();
  48. ?>